diff --git a/Crud/AuthRuleCrud.py b/Crud/AuthRuleCrud.py index e69de29..42afeb8 100644 --- a/Crud/AuthRuleCrud.py +++ b/Crud/AuthRuleCrud.py @@ -0,0 +1,32 @@ +from typing import Union + +from sqlalchemy.orm import Session + +from Exceptions.common import CommonException +from Model.AuthRuleModel import AuthRuleNode + + +def add_auth_rule_node(db: Session, name: str, belong: Union[int, None], node_type: str) -> AuthRuleNode: + parent_node = get_auth_rule_node_by_id(belong) + if not parent_node: + raise CommonException("父节点不存在") + if parent_node.node_type != 'category': + raise CommonException("父节点类型不为分类节点") + item = AuthRuleNode(name=name, belong=belong, node_type=node_type) + db.add(item) + db.commit() + db.refresh(item) + return item + + +def get_auth_rule_node_by_id(db: Session, node_id: int) -> AuthRuleNode: + auth_rule_node = db.query(AuthRuleNode).filter_by(id=node_id).first() + return auth_rule_node + + +def delete_auth_rule_node(db: Session, node_id: int): + pass + + +def get_auth_rule_tree(db: Session): + pass diff --git a/Model/AuthRuleModel.py b/Model/AuthRuleModel.py index e652ce3..1234ea6 100644 --- a/Model/AuthRuleModel.py +++ b/Model/AuthRuleModel.py @@ -4,13 +4,14 @@ from sqlalchemy import Column, String, Boolean, ForeignKey, Enum, Text, DateTime from Utils.SqlAlchemyUtils import Base -class AuthRule(Base): - __tablename__ = "AUTH_RULE_TABLE" - id = Column(String(32), primary_key=True, comment="应用id") - name = Column(String(32), unique=True, comment="应用名称") - secret_key = Column(String(255), comment="验证密匙") - token_key = Column(String(255), comment="app随机token加密密匙", default=lambda: uuid.uuid4().hex) +class AuthRuleNode(Base): + __tablename__ = "AUTH_RULE_NODE_TABLE" + id = Column(Integer, primary_key=True, comment="规则节点id") + name = Column(String(32), unique=True, comment="规则节点名称") + node_type = Column(Enum("category", "rule", name="节点类型")) + belong = Column(Integer, comment="所属节点") def to_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} + diff --git a/Model/PostModel.py b/Model/PostModel.py index 9c990e3..e7a7139 100644 --- a/Model/PostModel.py +++ b/Model/PostModel.py @@ -6,6 +6,7 @@ class Post(Base): __tablename__ = "POST_TABLE" id = Column(Integer, primary_key=True, comment="职务id") name = Column(String(32), comment="职务名称") + default_auth = Column(Text, comment="职务默认权限") def to_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} diff --git a/Router/AuthRuleRouter.py b/Router/AuthRuleRouter.py index e69de29..07f1a20 100644 --- a/Router/AuthRuleRouter.py +++ b/Router/AuthRuleRouter.py @@ -0,0 +1,35 @@ +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session + +from Schemas import AuthRuleSchemas +from Crud import AuthRuleCrud +from Utils.SqlAlchemyUtils import get_db + +router = APIRouter( + tags=["权限规则"], + prefix="/api/auth_rule", + # dependencies=[Depends(auth_token_depend)] +) + + +@router.post("/add_auth_rule_node", summary="添加权限规则节点", response_model=AuthRuleSchemas.AuthRuleNodeInfo) +def add_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeAddInfo, db: Session = Depends(get_db)): + new_auth_rule_node = AuthRuleCrud.add_auth_rule_node(db, body.name, body.belong, body.node_type) + return new_auth_rule_node + + +@router.post("/delete_auth_rule_node", summary="删除权限规则节点") +def delete_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeId, db: Session = Depends(get_db)): + AuthRuleCrud.delete_auth_rule_node(db, body.id) + return {"msg": "删除成功", "state": 1} + + +@router.post("/delete_auth_rule_node", summary="批量删除权限规则节点") +def delete_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeId, db: Session = Depends(get_db)): + AuthRuleCrud.delete_auth_rule_node(db, body.id) + return {"msg": "删除成功", "state": 1} + + +@router.post("/change_auth_rule_node", summary="修改权限规矩节点") +def change_auth_rule_node(body: AuthRuleSchemas.AuthRuleNodeChangeInfo): + pass diff --git a/Schemas/AuthRuleSchemas.py b/Schemas/AuthRuleSchemas.py index e69de29..15ba25b 100644 --- a/Schemas/AuthRuleSchemas.py +++ b/Schemas/AuthRuleSchemas.py @@ -0,0 +1,30 @@ +from enum import Enum + +from pydantic import BaseModel +from typing import Union + + +class AuthRuleNodeTypeEnum(Enum): + rule = 'rule' + category = 'category' + + +class AuthRuleNodeAddInfo(BaseModel): + name: str + belong: Union[None, int] + node_type: AuthRuleNodeTypeEnum + + +class AuthRuleNodeInfo(BaseModel): + id: int + name: str + belong: Union[None, int] + node_type: AuthRuleNodeTypeEnum + + +class AuthRuleNodeId(BaseModel): + id: int + + +class AuthRuleNodeIdList(BaseModel): + id_list: int