191 lines
5.7 KiB
Python
191 lines
5.7 KiB
Python
from typing import Any
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
from motor.motor_asyncio import AsyncIOMotorDatabase
|
|
|
|
import crud
|
|
import schemas
|
|
from api import deps
|
|
from db import get_database
|
|
from db.ckdb import CKDrive, get_ck_db
|
|
from db.redisdb import RedisDrive, get_redis_pool
|
|
from models.behavior_analysis import BehaviorAnalysis
|
|
from utils import casbin_enforcer
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/add_role_domain")
|
|
async def add_role_domain(
|
|
request: Request,
|
|
data_in: schemas.AddRoleForUserInDomain,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)):
|
|
"""
|
|
在域内为用户添加角色
|
|
"""
|
|
|
|
# username role dom
|
|
is_exists_role = await crud.role.check(db, _id=data_in.role_id, game=data_in.game)
|
|
if not is_exists_role:
|
|
return schemas.Msg(code='-1', msg='角色不存在')
|
|
casbin_enforcer.add_role_for_user_in_domain(user=data_in.username,
|
|
role=data_in.role_id,
|
|
domain=data_in.game)
|
|
return schemas.Msg(code='-1', msg='添加成功')
|
|
|
|
|
|
@router.post("/del_role_user_domain")
|
|
async def del_role_domain(
|
|
request: Request,
|
|
data_in: schemas.DeleteRolesForUserInDomain,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)):
|
|
"""
|
|
删除用户角色域
|
|
"""
|
|
|
|
# username role dom
|
|
|
|
res = casbin_enforcer.delete_roles_for_user_in_domain(user=data_in.username,
|
|
role=data_in.role_id,
|
|
domain=data_in.game)
|
|
return schemas.Msg(code=0, msg='ok', data=res)
|
|
|
|
|
|
@router.post("/add_policy")
|
|
async def add_policy(
|
|
request: Request,
|
|
data_id: schemas.AddPolicy,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)):
|
|
"""
|
|
向当前策略添加授权规则
|
|
"""
|
|
|
|
res = casbin_enforcer.add_policy(data_id.role_id, data_id.game, data_id.path, data_id.act)
|
|
return schemas.Msg(code=0, msg='ok', data=res)
|
|
|
|
|
|
@router.post("/del_policy")
|
|
async def remove_policy(
|
|
request: Request,
|
|
data_id: schemas.DelPolicy,
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)):
|
|
"""
|
|
向当前策略添加授权规则
|
|
"""
|
|
|
|
res = casbin_enforcer.remove_policy(data_id.role_id, data_id.game, data_id.path, data_id.act)
|
|
return schemas.Msg(code=0, msg='ok', data=res)
|
|
|
|
|
|
@router.get("/api_list")
|
|
async def api_list(
|
|
request: Request,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)):
|
|
"""
|
|
|
|
GetPermissionsForUserInDomain
|
|
已经添加的api
|
|
标记 已添加的权限
|
|
"""
|
|
res = await crud.api_list.all_api(db)
|
|
return schemas.Msg(code=0, msg='ok', data=res)
|
|
|
|
|
|
@router.post("/add_api")
|
|
async def add_api(
|
|
request: Request,
|
|
data_in: schemas.AddApi,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""
|
|
添加api
|
|
"""
|
|
try:
|
|
res = await crud.api_list.add_api(db, data_in)
|
|
except Exception as e:
|
|
return schemas.Msg(code=-1, msg='已经存在')
|
|
return schemas.Msg(code=0, msg='ok', data=res.matched_count)
|
|
|
|
|
|
@router.post("/del_api")
|
|
async def del_api(
|
|
request: Request,
|
|
data_in: schemas.DelApi,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)) -> schemas.Msg:
|
|
"""
|
|
删除api
|
|
"""
|
|
# 删除规则
|
|
paths = await crud.api_list.find_ids(db, data_in.ids, {'path': 1})
|
|
for item in paths:
|
|
casbin_enforcer.remove_filtered_policy(2, item['path'])
|
|
|
|
# 删除保存的记录
|
|
res = await crud.api_list.del_api(db, data_in)
|
|
|
|
return schemas.Msg(code=0, msg='ok', data=res.deleted_count)
|
|
|
|
|
|
@router.post("/edit_api")
|
|
async def edit_api(
|
|
request: Request,
|
|
data_in: schemas.EditApi,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)) -> schemas.Msg:
|
|
"""
|
|
编辑api
|
|
"""
|
|
res = await crud.api_list.edit_api(db, data_in)
|
|
return schemas.Msg(code=0, msg='ok', data=res.matched_count)
|
|
|
|
|
|
@router.get("/domain")
|
|
async def domain_list(
|
|
request: Request,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""
|
|
可选择域 游戏代号
|
|
"""
|
|
# roel dom path *
|
|
res = await crud.project.all_game(db)
|
|
return schemas.Msg(code=0, msg='ok', data=res)
|
|
|
|
|
|
@router.post("/add_roles")
|
|
async def add_roles(
|
|
request: Request,
|
|
data_in: schemas.AddRole,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""
|
|
新建角色
|
|
"""
|
|
try:
|
|
res = await crud.role.add_role(db, data_in)
|
|
return schemas.Msg(code=0, msg='ok', data=res.matched_count)
|
|
except Exception as e:
|
|
return schemas.Msg(code=-1, msg='添加失败', data=str(e))
|
|
|
|
|
|
@router.get("/roles")
|
|
async def roles(
|
|
request: Request,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""
|
|
域内所有角色
|
|
"""
|
|
res = await crud.role.dom_roles(db, game)
|
|
return schemas.Msg(code=0, msg='ok', data=res)
|