Plone 为什么checkPermission和has_permission返回不同的结果?
为什么: 及 返回不同的结果Plone 为什么checkPermission和has_permission返回不同的结果?,plone,Plone,为什么: 及 返回不同的结果 checkPermission似乎是正确的结果。因为它们是不同的功能 has_permission是AccessControl/users.py中BasicUser类的一种方法: user.checkPermission(permission, object) def has_permission(self, permission, object): """Check if the user has a permission on an object.
checkPermission似乎是正确的结果。因为它们是不同的功能
has_permission
是AccessControl/users.py中BasicUser
类的一种方法:
user.checkPermission(permission, object)
def has_permission(self, permission, object):
"""Check if the user has a permission on an object.
This method is just for inspecting permission settings. For access
control use getSecurityManager().checkPermission() instead.
"""
roles=rolesForPermissionOn(permission, object)
if isinstance(roles, str):
roles=[roles]
return self.allowed(object, roles)
而checkPermission
是在AccessControl/security.py
中定义的函数:
user.checkPermission(permission, object)
def has_permission(self, permission, object):
"""Check if the user has a permission on an object.
This method is just for inspecting permission settings. For access
control use getSecurityManager().checkPermission() instead.
"""
roles=rolesForPermissionOn(permission, object)
if isinstance(roles, str):
roles=[roles]
return self.allowed(object, roles)
has_permission
用于检查权限设置,而checkPermission
用于访问控制。换句话说,用户可能没有对某个对象的权限设置,但仍然可以通过其他安全策略机制进行访问。您能否提供一个示例,说明用户没有对某个对象的权限设置,但仍然可以通过其他安全策略机制进行访问?我认为权限是唯一的安全策略机制。用户aclark是对文件夹PloneStuff具有读取权限的组Ploners的成员。aclark.has_权限(Read,PloneStuff)失败,因为用户没有显式的读取权限(即,该对象上的读取未授予用户aclark),但aclark.checkPermission(Read,PloneStuff)成功,因为aclark是组Ploners的成员。这是未经测试的,但我认为这样一个示例将如何工作。所以,组实现的一个怪癖!谢谢。我不会这么说的……这只是一个例子。