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("Admin", "admin", "Have all permissions", 1) OPERATOR = DefaultRole("Operator", "operator", "System operator with deployment and management permissions", 10) DEVELOPER = DefaultRole("Developer", "developer", "Developer with git and issue management access", 100) QA = DefaultRole("QA", "qa", "Quality assurance with bug and testing permissions", 1000) @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): INVITE_COLLABORATOR = DefaultPermission("invite:collaborator", "Add/Remove participants", "Add/Remove participants") PUBLISH_PRODUCTION = DefaultPermission("publish:production", "Deploy to production", "Deploy to production") EDIT_PRODUCT = DefaultPermission("edit:product", "View product management UX", "View product management UX") ACCESS_GIT_REPOSITORIES = DefaultPermission("access:git_repositories", "Access to git repositories", "Access to git repositories") ACCESS_ISSUE_MANAGEMENT = DefaultPermission("access:issue_management", "Access to issue management", "Access to issue management") PUBLISH_ALPHA = DefaultPermission("publish:alpha", "Access to alpha deployment", "Access to alpha deployment") OPEN_BUGS = DefaultPermission("open:bugs", "Open/Close/Re-open bugs", "Open/Close/Re-open bugs") QA_FAILED_PASSED = DefaultPermission("qa:failed_passed", "Update QA status - QA failed/passed", "Update QA status - QA failed/passed") QA_TEST_REPORTS = DefaultPermission("qa:test_reports", "Update QA status - Test reports", "Update QA status - Test reports (Test coverage)") 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