python roles
by Snj
JavaScript
'''
import functools
class User(object):
def __init__(self):
super(User, self).__init__()
self.name = "Anders Andersson"
self.permission = "system_owner"
def role_has_permission(self, perm_list: list):
return True if self.permission in perm_list else False
class RolePermissionHandler(object):
VIEW_CLASSES = dict()
VIEW_CLASSES['view_one'] = dict(allow=["system_owner", "admin_access"])
VIEW_CLASSES['view_two'] = dict(allow=["personal_access", "admin_access"])
VIEW_CLASSES['view_three'] = dict(disallow=["system_owner", "admin_access", "personal_access"])
def __init__(self):
super(RolePermissionHandler, self).__init__()
# @property
@functools.lru_cache()
def __call__(self, view_class=None):
assert view_class is not None, f"\t\n> [!] {self.__class__.__name__} needs to be passed a View"
view_name = view_class.__class__.__name__
assert view_name in self.VIEW_CLASSES, f"\t\n> [!] {self.__class__.__name__}.VIEW_CLASSES dictionary has no entry for: {view_name} - Please add it!"
permissions = self.VIEW_CLASSES.get(view_name)
permission_type, rules_list = next(iter(permissions.items()))
if permission_type == "allow":
return view_class.user.role_has_permission(rules_list)
elif permission_type == "disallow":
return not view_class.user.role_has_permission(rules_list)
class view_one(object):
def __init__(self):
super(view_one, self).__init__()
self.user = User()
def test_func(self):
print(f"\n> User has permission for view: {self.__class__.__name__}: {role_permission_handler(self)}")
class view_two(object):
def __init__(self):
super(view_two, self).__init__()
self.user = User()
def test_func(self):
print(f"\n> User has permission for view: {self.__class__.__name__}: {role_permission_handler(self)}")
class view_three(object):
def...