我必须管理权限并且我有不同的用户类型,例如这里的一对。
def not_allowed(*args, **kwargs): return False
class User(object):
def __init__(self, userid):
self.userid = userid
def __getattr__(self, attr):
return not_allowed
def view_profile(self)
return True
class Admin(User):
def edit_comment(self):
return True
class Expert(User):
def delete_post(self):
return True
user = {'userid': 'user', 'roles': ['admin', 'expert']}
现在我希望能够拥有 MultiRole 类型,理论上它应该能够做它的角色能够做的所有事情。
我尝试过这样的事情:
class MultiRoleUser(User):
"""A multirole user has all the power of all the roles together
"""
def __init__(self, userid, roles):
super(MultiRoleUser, self).__init__(userid)
self.roles = roles
def __getattr__(self, attr):
all_funcs = [getattr(x, attr) for x in self.roles]
return any(x() for x in all_funcs)
哪个应该用作
u = MultiRoleUser('userid', [Admin, Expert])
但这不起作用,理想情况下,我想为传入的所有类调用方法并执行 or (with any)。
问题是要调用我需要有一个该类型的对象的方法..
理论上,我什至可以只为每个角色使用字典,但我喜欢默认为 false 的技巧,有时我还需要一个函数来计算权限。
有什么建议么?