Files
ShiErFeng/shierfeng-fastapi-backend/module_business/service/access_service.py
T

58 lines
1.8 KiB
Python

from sqlalchemy.ext.asyncio import AsyncSession
from exceptions.exception import PermissionException
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_business.dao.access_dao import AccessDao
class AccessService:
"""仓库与客户现场数据权限服务层。"""
@classmethod
async def assert_warehouse_access(
cls,
db: AsyncSession,
current_user: CurrentUserModel,
warehouse_id: int,
*,
for_update: bool = False,
) -> None:
"""校验当前用户是否有权访问指定仓库。"""
if current_user.user.admin:
return
if for_update:
has_warehouse = await AccessDao.user_has_warehouse(
db,
current_user.user.user_id,
warehouse_id,
for_update=True,
)
else:
has_warehouse = await AccessDao.user_has_warehouse(db, current_user.user.user_id, warehouse_id)
if not has_warehouse:
raise PermissionException(data='', message='无权访问该仓库')
@classmethod
async def assert_site_access(
cls,
db: AsyncSession,
current_user: CurrentUserModel,
site_id: int,
*,
for_update: bool = False,
) -> None:
"""校验当前用户是否有权访问指定客户现场。"""
if current_user.user.admin:
return
if for_update:
has_site = await AccessDao.user_has_site(
db,
current_user.user.user_id,
site_id,
for_update=True,
)
else:
has_site = await AccessDao.user_has_site(db, current_user.user.user_id, site_id)
if not has_site:
raise PermissionException(data='', message='无权访问该客户现场')