Zope:获得角色对象的获得许可

时间:2012-11-17 00:01:58

标签: permissions roles zope acquisition

我认为这一定很容易,但我确实遇到了麻烦:我想检查一个角色在某个对象上的获得许可。

我不想检查实际用户的角色或权限,我只想检查一个对象Anonymous是否拥有“访问内容信息”权限。如果对相关对象设置了权限,这很容易,但在获得权限时证明更加困难。

我试过了:

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

这不起作用,因为它不提供获取的权限。

我的下一个想法是向上走过父母,直到找到一些未获得的权限。但这并不能真正解决问题,因为它会忽略在层次结构中设置得更高的权限(好吧,我可以检查获取并继续向上)。还有一个奇怪之处:始终在rolesOfPermission中选择“Manager”。为什么会这样?

无论如何,我认为必须有一种更简单的方法来做到这一点?

1 个答案:

答案 0 :(得分:3)

只需使用rolesForPermissionOn()功能:

from AccessControl.PermissionRole import rolesForPermissionOn

roles = rolesForPermissionOn(permission, context)

这将返回具有给定上下文特定权限的角色列表。它将根据需要走在收购链上。