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...