67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from async_property import async_property
|
|
|
|
from cpl.auth.permission.permissions import Permissions
|
|
from cpl.core.typing import SerialId
|
|
from cpl.database.abc import DbModelABC
|
|
from cpl.dependency import ServiceProvider
|
|
|
|
|
|
class Role(DbModelABC):
|
|
def __init__(
|
|
self,
|
|
id: SerialId,
|
|
name: str,
|
|
description: str,
|
|
deleted: bool = False,
|
|
editor_id: Optional[SerialId] = None,
|
|
created: Optional[datetime] = None,
|
|
updated: Optional[datetime] = None,
|
|
):
|
|
DbModelABC.__init__(self, id, deleted, editor_id, created, updated)
|
|
self._name = name
|
|
self._description = description
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
return self._name
|
|
|
|
@name.setter
|
|
def name(self, value: str):
|
|
self._name = value
|
|
|
|
@property
|
|
def description(self) -> str:
|
|
return self._description
|
|
|
|
@description.setter
|
|
def description(self, value: str):
|
|
self._description = value
|
|
|
|
@async_property
|
|
async def permissions(self):
|
|
from cpl.auth.schema._permission.role_permission_dao import RolePermissionDao
|
|
|
|
role_permission_dao: RolePermissionDao = get_provider().get_service(RolePermissionDao)
|
|
return [await x.permission for x in await role_permission_dao.get_by_role_id(self.id)]
|
|
|
|
@async_property
|
|
async def users(self):
|
|
from cpl.auth.schema._permission.role_user_dao import RoleUserDao
|
|
|
|
role_user_dao: RoleUserDao = get_provider().get_service(RoleUserDao)
|
|
return [await x.user for x in await role_user_dao.get_by_role_id(self.id)]
|
|
|
|
async def has_permission(self, permission: Permissions) -> bool:
|
|
from cpl.auth.schema._permission.permission_dao import PermissionDao
|
|
from cpl.auth.schema._permission.role_permission_dao import RolePermissionDao
|
|
|
|
permission_dao: PermissionDao = get_provider().get_service(PermissionDao)
|
|
role_permission_dao: RolePermissionDao = get_provider().get_service(RolePermissionDao)
|
|
|
|
p = await permission_dao.get_by_name(permission.value)
|
|
|
|
return p.id in [x.id for x in await role_permission_dao.get_by_role_id(self.id)]
|