from dataclasses import dataclass from enum import IntEnum, Enum @dataclass(frozen=True) # frozen=True class DefaultRole: role_name: str role_key: str role_description: str role_level: int # Default roles, which all tenants will have, cannot be modified. class DefaultRoleEnum(Enum): ADMIN = DefaultRole("Administrator", "admin", "Have all permissions", 0) @dataclass(frozen=True) # frozen=True class DefaultPermission: permission_key: str permission_name: str permission_description: str # Default permissions, which all tenants will have, cannot be modified. class DefaultPermissionEnum(Enum): CHANGE_ROLES = DefaultPermission("change:roles", "Change roles", "Add/Update/Delete roles") CHANGE_PERMISSIONS = DefaultPermission("change:permissions", "Change permissions", "Add/Update/Remove permissions") ASSIGN_ROLES = DefaultPermission("assign:roles", "Assign roles", "Assign roles to user") class AdministrativeRole(IntEnum): NONE = 0 PERSONAL = 1 BUSINESS = 2 CONTRIBUTOR = 4 ADMINISTRATOR = 8 # now UI cannot siginin if user role is 8 class Capability(IntEnum): VISITOR = 1 COMMUNICATOR = 2 REQUESTER = 4 PROVIDER = 8 DEVELOPER = 16 class Feature(IntEnum): ANY = 0xFFFFFFFF SENDMESSAGE = 0x1 INITIATEREQUEST = 0x2 MAKEPROPOSAL = 0x4 CREATEPROJECT = 0x8