用户是Web GIS不可或缺的一部分。随着你的用户数量的增长,你可以看到自动化管理任务的价值(例如:设置许可、权限、创建和删除用户账户等)。gis
模型提供User
和UserManager
这两个类来处理用户相关操作并帮助你完成最常见的任务。
关于你的账户
首先呢,先来看看登录账户的一些信息,可以使用me
来获取当前登录用户的信息。
from arcgis.gis import GIS
gis = GIS(url="https://singlega.jiaoxn.local/arcgis", username="esricd", password="12345678", verify_cert=False)
gis.users.me
user
对象的属性
在Python中可以使用dir(<object>)
查询群组实例的属性,例如dir(gis.users.me)
;User
实例的常用的属性有:
- access
- created
- lastLogin
- description
- firstName
- lastName
- fullName
- level
- mfaEnabled
- provider
- userType
- storageQuota
- storageUsage
- groups
查询用户账号
UserManager
中的search()
方法可帮助你查询组织内的用户。search()
方法的中query
参数的详细信息可在ArcGIS REST API queries中查看。返回结果是一个User
对象数组。
esri_public_accounts = gis.users.search(query="email = @esri.com")
curator_accounts = [acc for acc in esri_public_accounts if acc.username.startswith('Esri_Curator')]
curator_accounts
如果知道用户名,还可以通过get()
方法找到指定的用户。
esri_hist_maps = ago_gis.users.get(username='Esri_Curator_Historical')
esri_hist_maps
创建新账户
Python API提供两种创建新账户的方法:signup()
和create()
。signup()
方法的使用是有局限性的,因为它只能向ArcGIS Enterprise创建内置账户,并且不能再ArcGIS Online上使用。与create()
不同的是,它可以匿名访问,不需要管理员权限。调用create()
是需要管理员权限的。该方法在ArcGIS Enterprise中是非常强大的,因为它允许你创建ArcGIS内置的凭证存储或者ArcGIS Enterprise凭证存储中创建账户,但对于ArcGIS Online中组织而言,只会使用内置凭证存储。对于内置存储创建的账号,你在添加新用户时需要设置密码,登录后,可任意修改密码;对于从Enterprise凭证存储创建的账号,可不设置密码,将会通过凭证存储来登录账号。
除了可设置的类型以外呢,还可以根据成员的需要,配置不同级别的账户。这个级别决定了你的张华可访问的权限。ArcGIS Enterprise提供了2种级别。级别1的账户,只能是查看内容,比如:Map、图层、应用等。级别2的账户可用来查看、创建、更新内容,拥有群组以及执行其他任务等。
demo_user1 = gis.users.create(username = 'demo_user1',
password = '0286eb9ac01f',
firstname = 'demo',
lastname = 'user',
email = 'python@esri.com',
description = 'Demonstrating how to create users using ArcGIS Python API',
role = 'org_user',
level = 2,
provider = 'arcgis')
demo_user1
用户角色
ArcGIS提供了一个角色的安全概念,不同的角色在组织内的权限不同。默认情况下,组织的角色有3个:org_user
、org_publisher
和org_admin
。简单来讲,用户角色的账户是组织内的活跃账户,能够创建内容项,加入群组和分享内容;发布角色的账户在用户角色的权限的基础上,还增加了创建托管内容和执行分析的权限;管理员角色的账号拥有所有操作权限。
查看用户角色,可方法属性role
。
demo_user1.role
管理用户角色
创建角色
调用RoleManager
的create()
方法来实现创建角色,为其分配权限。
privilege_list = ['portal:publisher:publishTiles',
'portal:user:createItem',
'portal:user:joinGroup']
tiles_pub_role = gis.users.roles.create(name = 'tiles_publisher',
description = 'User that can publish tile layers',
privileges = privilege_list)
tiles_pub_role
tiles_pub_role.privileges
创建自定义角色的用户
调用UserManager
的create()
方法来创建用户,实现思路是:先是3中默认角色的一种来创建用户,然后调用update_role()
方法来更新为自定义的角色。
tiles_pub_user = gis.users.create(username='tiles_publisher',
password = 'b0cb0c9f63e',
firstname = 'tiles',
lastname = 'publisher',
email = 'python@esri.com',
description = 'custom role, can only publish tile layers',
role = 'org_user') #org_user as thats the closest.
tiles_pub_user.update_role(role = tiles_pub_role)
tiles_pub_user.roleId
获取组织内所有的自定义的角色
gis.users.roles.all(max_roles=50)
删除用户
通过调用具有管理员权限的账户的delete()
方法,可以用来删除账户。删除账户会带来一系列的问题,例如:其发布的内容该怎么处理?因此,ArcGIS规定,当用户所拥有的内容项或者群组没有处理好之前,用户不能被删除。
获取用户内容
使用具有管理员权限的用户登录Python API,你可以在没有密码的情况下或者其他用户没有登录的情况下,访问其他用户内容。
可使用User
对象的folders
属性来获取用户拥有的文件夹,使用items()
方法来获取用户拥有的内容项。
publisher1 = gis.users.get('publisher1')
publisher1_folder_list = publisher1.folders
publisher1_item_list_rootfolder = publisher1.items()
转移用户内容
作为具有管理员权限的账户,可通过调用Item
对象的reassign_to()
方法来将内容从一个账号转移到另外一个账号中。
transport_tiles_item.reassign_to(target_owner = 'publisher1', target_folder= 'f1_english')