UnisKB/apps/common/constants/permission_constants.py

177 lines
5.7 KiB
Python
Raw Normal View History

2023-09-15 09:40:35 +00:00
"""
@project: qabot
@Author
@file permission_constants.py
@date2023/9/13 18:23
@desc: 权限,角色 常量
"""
from enum import Enum
from typing import List
class Group(Enum):
"""
2024-04-15 06:51:09 +00:00
权限组 一个组一般对应前端一个菜单
2023-09-15 09:40:35 +00:00
"""
USER = "USER"
DATASET = "DATASET"
APPLICATION = "APPLICATION"
SETTING = "SETTING"
MODEL = "MODEL"
TEAM = "TEAM"
2023-09-15 09:40:35 +00:00
class Operate(Enum):
"""
一个权限组的操作权限
"""
READ = 'READ'
EDIT = "EDIT"
CREATE = "CREATE"
DELETE = "DELETE"
"""
管理权限
"""
MANAGE = "MANAGE"
"""
使用权限
"""
USE = "USE"
2023-09-15 09:40:35 +00:00
class RoleGroup(Enum):
USER = 'USER'
APPLICATION_KEY = "APPLICATION_KEY"
APPLICATION_ACCESS_TOKEN = "APPLICATION_ACCESS_TOKEN"
2023-09-15 09:40:35 +00:00
class Role:
def __init__(self, name: str, decs: str, group: RoleGroup):
2023-09-15 09:40:35 +00:00
self.name = name
self.decs = decs
self.group = group
2023-09-15 09:40:35 +00:00
class RoleConstants(Enum):
ADMIN = Role("管理员", "管理员,预制目前不会使用", RoleGroup.USER)
USER = Role("用户", "用户所有权限", RoleGroup.USER)
APPLICATION_ACCESS_TOKEN = Role("会话", "只拥有应用会话框接口权限", RoleGroup.APPLICATION_ACCESS_TOKEN),
APPLICATION_KEY = Role("应用私钥", "应用私钥", RoleGroup.APPLICATION_KEY)
2023-09-15 09:40:35 +00:00
class Permission:
"""
权限信息
"""
def __init__(self, group: Group, operate: Operate, roles=None, dynamic_tag=None):
if roles is None:
roles = []
2023-09-15 09:40:35 +00:00
self.group = group
self.operate = operate
self.roleList = roles
self.dynamic_tag = dynamic_tag
2023-09-15 09:40:35 +00:00
def __str__(self):
return self.group.value + ":" + self.operate.value + (
(":" + self.dynamic_tag) if self.dynamic_tag is not None else '')
def __eq__(self, other):
return str(self) == str(other)
2023-09-15 09:40:35 +00:00
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.DELETE, roles=[RoleConstants.USER])
DATASET_CREATE = Permission(group=Group.DATASET, operate=Operate.CREATE,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
DATASET_READ = Permission(group=Group.DATASET, operate=Operate.READ,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
2024-01-03 03:51:48 +00:00
DATASET_EDIT = Permission(group=Group.DATASET, operate=Operate.EDIT,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
APPLICATION_READ = Permission(group=Group.APPLICATION, operate=Operate.READ,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
APPLICATION_CREATE = Permission(group=Group.APPLICATION, operate=Operate.CREATE,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
APPLICATION_DELETE = Permission(group=Group.APPLICATION, operate=Operate.DELETE,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
APPLICATION_EDIT = Permission(group=Group.APPLICATION, operate=Operate.EDIT,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
SETTING_READ = Permission(group=Group.SETTING, operate=Operate.READ,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
2023-09-15 09:40:35 +00:00
MODEL_READ = Permission(group=Group.MODEL, operate=Operate.READ, roles=[RoleConstants.ADMIN, RoleConstants.USER])
MODEL_EDIT = Permission(group=Group.MODEL, operate=Operate.EDIT, roles=[RoleConstants.ADMIN, RoleConstants.USER])
MODEL_DELETE = Permission(group=Group.MODEL, operate=Operate.DELETE,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
MODEL_CREATE = Permission(group=Group.MODEL, operate=Operate.CREATE,
roles=[RoleConstants.ADMIN, RoleConstants.USER])
TEAM_READ = Permission(group=Group.TEAM, operate=Operate.READ, roles=[RoleConstants.ADMIN, RoleConstants.USER])
TEAM_CREATE = Permission(group=Group.TEAM, operate=Operate.CREATE, roles=[RoleConstants.ADMIN, RoleConstants.USER])
TEAM_DELETE = Permission(group=Group.TEAM, operate=Operate.DELETE, roles=[RoleConstants.ADMIN, RoleConstants.USER])
TEAM_EDIT = Permission(group=Group.TEAM, operate=Operate.EDIT, roles=[RoleConstants.ADMIN, RoleConstants.USER])
2023-09-15 09:40:35 +00:00
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 | Permission]
, client_id, client_type, current_role: RoleConstants, **keywords):
2023-09-15 09:40:35 +00:00
self.role_list = role_list
self.permission_list = permission_list
self.client_id = client_id
self.client_type = client_type
self.keywords = keywords
self.current_role = current_role
2023-09-15 09:40:35 +00:00
class CompareConstants(Enum):
# 或者
OR = "OR"
# 并且
AND = "AND"
class ViewPermission:
def __init__(self, roleList: List[RoleConstants], permissionList: List[PermissionConstants | object],
2023-09-15 09:40:35 +00:00
compare=CompareConstants.OR):
self.roleList = roleList
self.permissionList = permissionList
self.compare = compare