mirror of
https://github.com/fastapi-practices/fastapi_best_architecture.git
synced 2025-08-17 22:21:35 +08:00

* Reconstruct RBAC authentication logic * fix typo * Migrate casbin sqla Adapter to redis * Delete casbin model conf file * Add permission dependencies * Add request permission depends on execution condition * Update openapi authorization method * Add request permission identity * Add request permission dependency description * Migrate casbin redis adapter to sqla * Update menu model and add function * Fix menu permission identification * Update user partial interface permissions * Update menu table SQL * Add role menu permission description to README * fix README typo * Simplify permission dependency injection * Fix menu authorization store * Fix interface permission dependency order * Update role menu permission flag * Update the background permission logic of the interface
34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
from sqlalchemy import String
|
|
from sqlalchemy.dialects.mysql import LONGTEXT
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from backend.app.models.base import MappedBase, id_key
|
|
|
|
|
|
class CasbinRule(MappedBase):
|
|
"""重写 casbin 中的 CasbinRule model 类, 使用自定义 Base, 避免产生 alembic 迁移问题"""
|
|
|
|
__tablename__ = 'sys_casbin_rule'
|
|
|
|
id: Mapped[id_key]
|
|
ptype: Mapped[str] = mapped_column(String(255), comment='策略类型: p / g')
|
|
v0: Mapped[str] = mapped_column(String(255), comment='角色ID / 用户uuid')
|
|
v1: Mapped[str] = mapped_column(LONGTEXT, comment='api路径 / 角色名称')
|
|
v2: Mapped[str | None] = mapped_column(String(255), comment='请求方法')
|
|
v3: Mapped[str | None] = mapped_column(String(255))
|
|
v4: Mapped[str | None] = mapped_column(String(255))
|
|
v5: Mapped[str | None] = mapped_column(String(255))
|
|
|
|
def __str__(self):
|
|
arr = [self.ptype]
|
|
for v in (self.v0, self.v1, self.v2, self.v3, self.v4, self.v5):
|
|
if v is None:
|
|
break
|
|
arr.append(v)
|
|
return ', '.join(arr)
|
|
|
|
def __repr__(self):
|
|
return '<CasbinRule {}: "{}">'.format(self.id, str(self))
|