アクセス許可を管理する必要があり、たとえばここにあるカップルのように、さまざまなユーザー タイプがあります。
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) を実行したいと考えています。
問題は、そのタイプのオブジェクトが必要なメソッドを呼び出すことです..
理論的には、代わりに各ロールに辞書を使用することもできますが、デフォルトの偽のトリックが好きで、パーミッションを計算する関数も必要になる場合があります。
助言がありますか?