39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
|
from sqlalchemy.orm import Session
|
||
|
|
||
|
from AppUser.Model.RoleModel import Role, RoleAccessPolicy
|
||
|
from AppUser.Schemas import RoleSchema
|
||
|
from Utils.UniqueCoder import TimeSerialNumUtils
|
||
|
|
||
|
|
||
|
def set_next_id(db: Session, num_len: int, prefix: str, model):
|
||
|
data = db.query(model).with_entities(model.id).order_by(model.id.desc()).first()
|
||
|
if data:
|
||
|
num = str(int({**data}.get("id").split(prefix)[-1]) + 1)
|
||
|
return prefix + "0" * (num_len - len(num)) + num
|
||
|
else:
|
||
|
return prefix + "0" * (num_len - 1) + "1"
|
||
|
|
||
|
|
||
|
def create_role(db: Session, name: str):
|
||
|
role_item = Role(**{"name": name})
|
||
|
role_item.id = set_next_id(db=db, num_len=2, prefix="ROLE", model=Role)
|
||
|
db.add(role_item)
|
||
|
db.commit()
|
||
|
db.refresh(role_item)
|
||
|
return role_item
|
||
|
|
||
|
|
||
|
def get_role_by_id(db: Session, role_id: str):
|
||
|
role_obj = db.query(Role).filter_by(id=role_id).first()
|
||
|
return role_obj
|
||
|
|
||
|
|
||
|
def create_role_policy(db: Session, role_id: str, schema: RoleSchema.CreateRolePolicyReqBody):
|
||
|
rap_obj = RoleAccessPolicy(**schema.dict())
|
||
|
rap_obj.id = TimeSerialNumUtils.create_time_serial_num(prefix="AP", suffix="")
|
||
|
rap_obj.role_id = role_id
|
||
|
db.add(rap_obj)
|
||
|
db.commit()
|
||
|
db.refresh(rap_obj)
|
||
|
return rap_obj.to_dict()
|