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的成员。这是未经测试的,但我认为这样一个示例将如何工作。所以,组实现的一个怪癖!谢谢。我不会这么说的……这只是一个例子。