mirror of
https://github.com/fastapi-admin/fastapi-admin.git
synced 2025-08-16 20:11:39 +08:00
35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
from copy import deepcopy
|
|
|
|
from fastapi import APIRouter, Depends
|
|
|
|
from ..common import check_has_permission
|
|
from ..depends import jwt_optional
|
|
from ..factory import app
|
|
from ..shortcuts import get_object_or_404
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/site",)
|
|
async def site(user_id=Depends(jwt_optional)):
|
|
site_ = app.site
|
|
user = None
|
|
if user_id:
|
|
user = await get_object_or_404(app.user_model, pk=user_id)
|
|
site_copy = deepcopy(site_)
|
|
if user and app.permission and not user.is_superuser:
|
|
await user.fetch_related("roles")
|
|
for index, menu in enumerate(site_.menus):
|
|
if menu.url and ("/rest" in menu.url or "/page" in menu.url):
|
|
model = menu.url.split("/")[-1]
|
|
if not await check_has_permission(user, model):
|
|
site_copy.menus.remove(menu)
|
|
elif menu.children:
|
|
for index_child, child in enumerate(menu.children):
|
|
if child.url and ("/rest" in child.url or "/page" in child.url):
|
|
model = child.url.split("/")[-1]
|
|
if not await check_has_permission(user, model):
|
|
site_copy.menus[index].children.remove(child)
|
|
site_copy.menus = list(filter(lambda x: x.children != [] or x.url, site_copy.menus))
|
|
return site_copy.dict(by_alias=True, exclude_unset=True)
|