2024-12-19 13:01:02 -08:00
|
|
|
from sqlalchemy import delete, select
|
2024-11-18 08:13:08 -08:00
|
|
|
|
2016-03-01 14:21:28 +00:00
|
|
|
from app import db
|
|
|
|
|
from app.dao import DAOClass
|
2024-01-12 16:05:18 -05:00
|
|
|
from app.enums import PermissionType
|
2024-12-19 11:59:34 -08:00
|
|
|
from app.models import Permission, Service
|
2016-03-02 11:10:52 +00:00
|
|
|
|
2016-02-26 17:11:30 +00:00
|
|
|
|
2016-02-26 12:00:16 +00:00
|
|
|
class PermissionDAO(DAOClass):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Permission
|
|
|
|
|
|
2016-02-26 17:11:30 +00:00
|
|
|
def add_default_service_permissions_for_user(self, user, service):
|
2024-01-16 15:47:55 -05:00
|
|
|
for name in PermissionType.defaults():
|
2016-02-26 17:11:30 +00:00
|
|
|
permission = Permission(permission=name, user=user, service=service)
|
|
|
|
|
self.create_instance(permission, _commit=False)
|
|
|
|
|
|
2016-03-22 13:14:23 +00:00
|
|
|
def remove_user_service_permissions(self, user, service):
|
2024-11-18 08:13:08 -08:00
|
|
|
db.session.execute(
|
2024-12-19 11:10:03 -08:00
|
|
|
delete(self.Meta.model).where(
|
|
|
|
|
self.Meta.model.user == user, self.Meta.model.service == service
|
|
|
|
|
)
|
2024-11-18 08:13:08 -08:00
|
|
|
)
|
|
|
|
|
db.session.commit()
|
2016-03-22 13:14:23 +00:00
|
|
|
|
2019-05-21 15:53:48 +01:00
|
|
|
def remove_user_service_permissions_for_all_services(self, user):
|
2024-12-19 11:10:03 -08:00
|
|
|
db.session.execute(delete(self.Meta.model).where(self.Meta.model.user == user))
|
2024-11-18 08:13:08 -08:00
|
|
|
db.session.commit()
|
2019-05-21 15:53:48 +01:00
|
|
|
|
2023-08-29 14:54:30 -07:00
|
|
|
def set_user_service_permission(
|
|
|
|
|
self, user, service, permissions, _commit=False, replace=False
|
|
|
|
|
):
|
2016-03-01 14:21:28 +00:00
|
|
|
try:
|
2016-06-07 16:31:10 +01:00
|
|
|
if replace:
|
2024-11-18 08:13:08 -08:00
|
|
|
db.session.execute(
|
2024-11-18 08:41:57 -08:00
|
|
|
delete(self.Meta.model).where(
|
|
|
|
|
self.Meta.model.user == user, self.Meta.model.service == service
|
2024-11-18 08:13:08 -08:00
|
|
|
)
|
2024-04-24 16:27:20 -04:00
|
|
|
)
|
2024-11-18 08:41:57 -08:00
|
|
|
|
2024-11-18 08:13:08 -08:00
|
|
|
db.session.commit()
|
2016-03-01 14:21:28 +00:00
|
|
|
for p in permissions:
|
2016-06-06 12:37:06 +01:00
|
|
|
p.user = user
|
|
|
|
|
p.service = service
|
2016-03-01 14:21:28 +00:00
|
|
|
self.create_instance(p, _commit=False)
|
|
|
|
|
except Exception as e:
|
2016-03-23 16:30:47 +00:00
|
|
|
if _commit:
|
|
|
|
|
db.session.rollback()
|
2016-03-01 14:21:28 +00:00
|
|
|
raise e
|
|
|
|
|
else:
|
2016-03-23 16:30:47 +00:00
|
|
|
if _commit:
|
|
|
|
|
db.session.commit()
|
2016-03-01 14:21:28 +00:00
|
|
|
|
2016-06-15 16:32:52 +01:00
|
|
|
def get_permissions_by_user_id(self, user_id):
|
2023-08-29 14:54:30 -07:00
|
|
|
return (
|
2024-11-18 08:13:08 -08:00
|
|
|
db.session.execute(
|
2024-12-19 13:21:59 -08:00
|
|
|
select(Permission)
|
2024-12-19 13:33:59 -08:00
|
|
|
.join(Service)
|
2024-12-19 13:21:59 -08:00
|
|
|
.where(Permission.user_id == user_id)
|
2024-12-19 12:33:28 -08:00
|
|
|
.where(Service.active.is_(True))
|
2024-11-18 08:13:08 -08:00
|
|
|
)
|
|
|
|
|
.scalars()
|
2023-08-29 14:54:30 -07:00
|
|
|
.all()
|
|
|
|
|
)
|
2016-06-15 16:32:52 +01:00
|
|
|
|
2019-05-21 15:53:48 +01:00
|
|
|
def get_permissions_by_user_id_and_service_id(self, user_id, service_id):
|
2023-08-29 14:54:30 -07:00
|
|
|
return (
|
2024-11-18 08:41:57 -08:00
|
|
|
db.session.execute(
|
2024-12-19 13:47:14 -08:00
|
|
|
select(Permission)
|
|
|
|
|
.join(Service)
|
|
|
|
|
.where(Permission.user_id == user_id)
|
|
|
|
|
.where(Service.active.is_(True))
|
|
|
|
|
.where(Service.id == service_id)
|
2024-11-18 08:13:08 -08:00
|
|
|
)
|
|
|
|
|
.scalars()
|
2023-08-29 14:54:30 -07:00
|
|
|
.all()
|
|
|
|
|
)
|
2019-05-21 15:53:48 +01:00
|
|
|
|
2016-02-26 12:00:16 +00:00
|
|
|
|
|
|
|
|
permission_dao = PermissionDAO()
|