# coding=utf-8 """ @project: qabot @Author:虎 @file: permission_constants.py @date:2023/9/13 18:23 @desc: 权限,角色 常量 """ from enum import Enum from typing import List class Group(Enum): """ 权限组 一个组一般对应前段一个菜单 """ USER = "USER" class Operate(Enum): """ 一个权限组的操作权限 """ READ = 'READ' EDIT = "EDIT" CREATE = "CREATE" DELETE = "DELETE" class Role: def __init__(self, name: str, decs: str): self.name = name self.decs = decs class RoleConstants(Enum): ADMIN = Role("管理员", "管理员,预制目前不会使用") USER = Role("用户", "用户所有权限") SESSION = Role("会话", decs="只拥有应用会话框接口权限") class Permission: """ 权限信息 """ def __init__(self, group: Group, operate: Operate, roles: List[RoleConstants]): self.group = group self.operate = operate self.roleList = roles def __str__(self): return self.group.value + ":" + self.operate.value class PermissionConstants(Enum): """ 权限枚举 """ USER_READ = Permission(group=Group.USER, operate=Operate.READ, roles=[RoleConstants.ADMIN, RoleConstants.USER]) USER_EDIT = Permission(group=Group.USER, operate=Operate.EDIT, roles=[RoleConstants.ADMIN, RoleConstants.USER]) USER_DELETE = Permission(group=Group.USER, operate=Operate.EDIT, roles=[RoleConstants.USER]) def get_permission_list_by_role(role: RoleConstants): """ 根据角色 获取角色对应的权限 :param role: 角色 :return: 权限 """ return list(map(lambda k: PermissionConstants[k], list(filter(lambda k: PermissionConstants[k].value.roleList.__contains__(role), PermissionConstants.__members__)))) class Auth: """ 用于存储当前用户的角色和权限 """ def __init__(self, role_list: List[RoleConstants], permission_list: List[PermissionConstants]): self.role_list = role_list self.permission_list = permission_list class CompareConstants(Enum): # 或者 OR = "OR" # 并且 AND = "AND" class ViewPermission: def __init__(self, roleList: List[RoleConstants], permissionList: List[PermissionConstants], compare=CompareConstants.OR): self.roleList = roleList self.permissionList = permissionList self.compare = compare