2012-11-17 35 views
0

我認爲這一定很容易,但我真的有麻煩找出它:我想檢查一個對象的角色獲得許可。Zope:獲得角色對象的獲得許可

我不想檢查實際用戶的角色或權限,我只想檢查一個對象上的匿名是否具有「訪問內容信息」權限。如果在有問題的對象上設置權限,這很容易,但是在獲得權限時證明更加困難。

我嘗試這樣做:

siteRoles = ('Anonymous', 'myRole1', 'myRole2', 'Manager') 
permission = 'Access contents information' 

rolesDictList = self.rolesOfPermission(permission) 

roles = [roleDict['name'] for roleDict in rolesDictList if roleDict['selected']] 

for i, role in enumerate(siteRoles): 
    if role in roles: 
     roleMin = i 
     break 

return roleMin 

這是不行的,因爲它不會給獲得許可。

我的下一個想法是向上走過父母,直到我找到一些沒有獲得的權限。但是這並不能真正解決問題,因爲它會忽略在層次結構中設置更高的權限(好吧,我可以檢查獲得的並繼續向上)。另外還有一個奇怪的地方:'Manager'總是在rolesOfPermission中被選中。這是爲什麼?

無論如何,我認爲必須有一個更簡單的方法來做到這一點?

回答

3

只需使用rolesForPermissionOn()功能:

from AccessControl.PermissionRole import rolesForPermissionOn 

roles = rolesForPermissionOn(permission, context) 

這將返回對給定上下文的具體權限的角色列表。它將根據需要走上收購鏈。