Build lightweight AI agent admin
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Role Model - 角色模型
|
||||
用于管理系统角色和权限分配
|
||||
"""
|
||||
from sqlalchemy import Column, String, Integer, Boolean, Text, Table, ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from app.base_model import BaseModel
|
||||
from app.database import Base
|
||||
|
||||
|
||||
# 角色-菜单关联表
|
||||
role_menu = Table(
|
||||
'core_role_menu',
|
||||
Base.metadata,
|
||||
Column('role_id', String(21), ForeignKey('core_role.id', ondelete='CASCADE'), primary_key=True),
|
||||
Column('menu_id', String(21), ForeignKey('core_menu.id', ondelete='CASCADE'), primary_key=True),
|
||||
)
|
||||
|
||||
# 角色-权限关联表
|
||||
role_permission = Table(
|
||||
'core_role_permission',
|
||||
Base.metadata,
|
||||
Column('role_id', String(21), ForeignKey('core_role.id', ondelete='CASCADE'), primary_key=True),
|
||||
Column('permission_id', String(21), ForeignKey('core_permission.id', ondelete='CASCADE'), primary_key=True),
|
||||
)
|
||||
|
||||
# 角色-部门关联表
|
||||
role_dept = Table(
|
||||
'core_role_dept',
|
||||
Base.metadata,
|
||||
Column('role_id', String(21), ForeignKey('core_role.id', ondelete='CASCADE'), primary_key=True),
|
||||
Column('dept_id', String(21), ForeignKey('core_dept.id', ondelete='CASCADE'), primary_key=True),
|
||||
)
|
||||
|
||||
|
||||
class Role(BaseModel):
|
||||
"""
|
||||
角色模型 - 用于用户角色管理和权限分配
|
||||
|
||||
字段说明:
|
||||
- name: 角色名称
|
||||
- code: 角色编码(唯一)
|
||||
- role_type: 角色类型(0-系统角色, 1-自定义角色)
|
||||
- status: 角色状态
|
||||
- priority: 角色优先级
|
||||
- description: 角色描述
|
||||
- remark: 备注
|
||||
"""
|
||||
__tablename__ = "core_role"
|
||||
|
||||
# 角色类型选择
|
||||
ROLE_TYPE_CHOICES = {
|
||||
0: '系统角色',
|
||||
1: '自定义角色',
|
||||
}
|
||||
|
||||
# 角色名称
|
||||
name = Column(String(64), nullable=False, index=True, comment="角色名称")
|
||||
|
||||
# 角色编码
|
||||
code = Column(String(64), unique=True, nullable=False, index=True, comment="角色编码")
|
||||
|
||||
# 角色类型
|
||||
role_type = Column(Integer, default=1, index=True, comment="角色类型(0-系统角色, 1-自定义角色)")
|
||||
|
||||
# 角色状态
|
||||
status = Column(Boolean, default=True, index=True, comment="角色状态(启用/禁用)")
|
||||
|
||||
# 角色优先级
|
||||
priority = Column(Integer, default=0, index=True, comment="角色优先级(数字越大优先级越高)")
|
||||
|
||||
# 角色描述
|
||||
description = Column(Text, nullable=True, comment="角色描述")
|
||||
|
||||
# 备注
|
||||
remark = Column(Text, nullable=True, comment="备注信息")
|
||||
|
||||
# 多对多关系
|
||||
menus = relationship("Menu", secondary=role_menu, backref="roles", lazy="selectin")
|
||||
permissions = relationship("Permission", secondary=role_permission, backref="roles", lazy="selectin")
|
||||
depts = relationship("Dept", secondary=role_dept, backref="roles", lazy="selectin")
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.code})"
|
||||
|
||||
def is_system_role(self) -> bool:
|
||||
"""判断是否为系统角色"""
|
||||
return self.role_type == 0
|
||||
|
||||
def can_delete(self) -> bool:
|
||||
"""判断是否可以删除(系统角色不可删除)"""
|
||||
return self.role_type != 0
|
||||
|
||||
def get_role_type_display(self) -> str:
|
||||
"""获取角色类型的显示名称"""
|
||||
return self.ROLE_TYPE_CHOICES.get(self.role_type, '未知')
|
||||
Reference in New Issue
Block a user