用戶是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 = '[email protected]',
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 = '[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')