forked from iti-framework/iTi-Flask
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
from iti.applications.extensions import db
|
|
from iti.applications.common.enums import StatusEnum
|
|
from iti.applications.common.utils import BaseSchema
|
|
from apiflask.fields import String, DateTime, Enum, Integer, Nested, List
|
|
from iti.applications.common.crud import BaseModelMixin
|
|
from sqlalchemy.ext.hybrid import hybrid_property
|
|
|
|
|
|
class Role(BaseModelMixin):
|
|
"""
|
|
角色表
|
|
"""
|
|
|
|
__tablename__ = "sys_role"
|
|
name = db.Column(db.String(64), nullable=False, comment="名称")
|
|
code = db.Column(db.String(64), nullable=False, unique=True, comment="编码")
|
|
desc = db.Column(db.Text, nullable=True, comment="描述")
|
|
sort = db.Column(db.Integer, nullable=False, default=0, comment="排序")
|
|
status = db.Column(
|
|
db.Enum(StatusEnum, values_callable=lambda x: [e.value for e in x]),
|
|
nullable=False,
|
|
default=StatusEnum.ENABLED.value,
|
|
comment="状态",
|
|
)
|
|
|
|
# 关系
|
|
users = db.relationship(
|
|
"User",
|
|
secondary="sys_user_role",
|
|
primaryjoin="Role.id == sys_user_role.c.role_id",
|
|
secondaryjoin="User.id == sys_user_role.c.user_id",
|
|
back_populates="roles",
|
|
)
|
|
menus = db.relationship(
|
|
"SysMenu",
|
|
secondary="sys_role_menu",
|
|
primaryjoin="Role.id == sys_role_menu.c.role_id",
|
|
secondaryjoin="SysMenu.id == sys_role_menu.c.menu_id",
|
|
# back_populates="roles",
|
|
)
|
|
|
|
_permissions = []
|
|
|
|
@hybrid_property
|
|
def permissions(self):
|
|
if len(self._permissions) == 0:
|
|
# 读取 menus 的 id 列表
|
|
self._permissions = [menu.id for menu in self.menus]
|
|
return self._permissions
|
|
|
|
|
|
class RoleSchema(BaseSchema):
|
|
id = String()
|
|
name = String()
|
|
code = String()
|
|
desc = String()
|
|
sort = Integer()
|
|
status = Enum(StatusEnum, by_value=True)
|
|
created_at = DateTime(format="%Y-%m-%d %H:%M:%S")
|
|
updated_at = DateTime(format="%Y-%m-%d %H:%M:%S")
|
|
# 关系
|
|
users = Nested("UserSchema", many=True, dump_only=True, exclude=["roles"])
|
|
menus = Nested("SysMenuSchema", many=True, dump_only=True)
|
|
permissions = List(String())
|