ArcGIS API For Python 07- 访问和管理用户

用户是Web GIS不可或缺的一部分。随着你的用户数量的增长,你可以看到自动化管理任务的价值(例如:设置许可、权限、创建和删除用户账户等)。gis模型提供UserUserManager这两个类来处理用户相关操作并帮助你完成最常见的任务。

关于你的账户

首先呢,先来看看登录账户的一些信息,可以使用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
  • email
  • 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 = '[email protected]',
                              description = 'Demonstrating how to create users using ArcGIS Python API',
                              role = 'org_user',
                              level = 2,
                              provider = 'arcgis')
demo_user1

用户角色

ArcGIS提供了一个角色的安全概念,不同的角色在组织内的权限不同。默认情况下,组织的角色有3个:org_userorg_publisherorg_admin。简单来讲,用户角色的账户是组织内的活跃账户,能够创建内容项,加入群组和分享内容;发布角色的账户在用户角色的权限的基础上,还增加了创建托管内容和执行分析的权限;管理员角色的账号拥有所有操作权限。

查看用户角色,可方法属性role

demo_user1.role

管理用户角色

创建角色

调用RoleManagercreate()方法来实现创建角色,为其分配权限。

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

创建自定义角色的用户

调用UserManagercreate()方法来创建用户,实现思路是:先是3中默认角色的一种来创建用户,然后调用update_role()方法来更新为自定义的角色。


tiles_pub_user = gis.users.create(username='tiles_publisher',
                                 password = 'b0cb0c9f63e',
                                 firstname = 'tiles',
                                 lastname = 'publisher',
                                 email = '[email protected]',
                                 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')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章