【发布时间】:2014-03-22 05:20:49
【问题描述】:
我有 5 类用户:
- 管理员 (所有权限)
- 创建者 (权限“v”、“a”、“m”、“c”)
- 经理(权限“v”、“a”、“m”)
- 分析师 (权限“v”、“a”)
- 查看者 (权限“v”)
这是一种分层设置,其中每个用户都拥有前一个用户的权限。要在我的项目中进行设置,我可以轻松编写:
class RootFactory(object):
__acl__ = [
(Allow, '__ADMIN__', ALL_PERMISSIONS),
(Allow, 'creator', ('VIEWER', 'ANALYST', 'MANAGER', 'CREATOR')),
(Allow, 'manager', ('VIEWER', 'ANALYST', 'MANAGER')),
(Allow, 'analyst', ('VIEWER', 'ANALYST')),
(Allow, 'viewer', ('VIEWER')),
(Allow, Everyone, NO_PERMISSION_REQUIRED)
]
def __init__(self, request):
self.request = request
然后,在我的views.py中,例如,我这样做:
@view_config(route_name='mgmt_handler', renderer='manage.jinja2', permission='MANAGER')
def mgmt_handler(request):
pass # do stuff
这适用于大多数个实例。但是,我不确定如何最好地完成以下任务:
-
如何根据需要允许查看者 user1 具有某些更高的权限,从而使此访问控制更加“细化”?这是否属于“对象级”安全领域?在大多数情况下,全局根工厂就足够了,但是我如何适应那些低级用户被授予更高权限或高级用户被拒绝更低权限的情况呢?
李> 有没有一种方法可以方便地确定特定用户的原则,以便在我看来我可以说出以下内容:
if user.principle in list_of_permissions: do something...?或者,这只是来自存储用户组的数据库的另一个查询?
案例和要点,我的目标是拥有一个灵活的、分层的权限系统。最有效的方法是什么?我读过的教程只涉及更简单的全局策略(我确实理解)。我的部分问题是如何全面了解对象/实例级安全性。
感谢您的帮助。
【问题讨论】: