diff --git a/app/core/permissions/endpoints_permissions.py b/app/core/permissions/endpoints_permissions.py index 7398c15217..0ea32a6b44 100644 --- a/app/core/permissions/endpoints_permissions.py +++ b/app/core/permissions/endpoints_permissions.py @@ -12,6 +12,7 @@ from app.core.groups.groups_type import GroupType from app.core.permissions import cruds_permissions, schemas_permissions +from app.core.permissions.factory_permissions import CorePermissionsFactory from app.dependencies import ( get_db, is_user, @@ -30,7 +31,7 @@ root="permissions", tag="Permissions", router=router, - factory=None, + factory=CorePermissionsFactory(), ) hyperion_security_logger = logging.getLogger("hyperion.security") diff --git a/app/core/permissions/factory_permissions.py b/app/core/permissions/factory_permissions.py new file mode 100644 index 0000000000..1a5144bae5 --- /dev/null +++ b/app/core/permissions/factory_permissions.py @@ -0,0 +1,31 @@ +from sqlalchemy.ext.asyncio import AsyncSession + +from app.core.groups.groups_type import GroupType +from app.core.permissions import cruds_permissions, schemas_permissions +from app.core.utils.config import Settings +from app.module import permissions_list +from app.types.factory import Factory + + +class CorePermissionsFactory(Factory): + depends_on = [] + + @classmethod + async def run(cls, db: AsyncSession, settings: Settings) -> None: + for permission in permissions_list: + await cruds_permissions.create_group_permission( + permission=schemas_permissions.CoreGroupPermission( + permission_name=permission, + group_id=GroupType.admin.value, + ), + db=db, + ) + await db.commit() + + @classmethod + async def should_run(cls, db: AsyncSession): + permissions = await cruds_permissions.get_permissions( + permissions_list, + db, + ) + return not any(permission.groups for permission in permissions)