Files
notifications-api/app/dao/permissions_dao.py

78 lines
2.3 KiB
Python
Raw Normal View History

2024-11-18 08:13:08 -08:00
from sqlalchemy import delete, select
from app import db
from app.dao import DAOClass
from app.enums import PermissionType
from app.models import Permission
2016-03-02 11:10:52 +00:00
class PermissionDAO(DAOClass):
class Meta:
model = Permission
def add_default_service_permissions_for_user(self, user, service):
for name in PermissionType.defaults():
permission = Permission(permission=name, user=user, service=service)
self.create_instance(permission, _commit=False)
def remove_user_service_permissions(self, user, service):
2024-11-18 08:13:08 -08:00
db.session.execute(
2024-11-18 08:41:57 -08:00
delete(self.Meta.model).filter_by(user=user, service=service)
2024-11-18 08:13:08 -08:00
)
db.session.commit()
def remove_user_service_permissions_for_all_services(self, user):
2024-11-18 08:41:57 -08:00
db.session.execute(delete(self.Meta.model).filter_by(user=user))
2024-11-18 08:13:08 -08:00
db.session.commit()
2023-08-29 14:54:30 -07:00
def set_user_service_permission(
self, user, service, permissions, _commit=False, replace=False
):
try:
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()
for p in permissions:
p.user = user
p.service = service
self.create_instance(p, _commit=False)
except Exception as e:
if _commit:
db.session.rollback()
raise e
else:
if _commit:
db.session.commit()
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-11-18 08:41:57 -08:00
select(self.Meta.model)
.filter_by(user_id=user_id)
.join(Permission.service)
.filter_by(active=True)
2024-11-18 08:13:08 -08:00
)
.scalars()
2023-08-29 14:54:30 -07:00
.all()
)
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(
select(self.Meta.model)
.filter_by(user_id=user_id)
.join(Permission.service)
.filter_by(active=True, id=service_id)
2024-11-18 08:13:08 -08:00
)
.scalars()
2023-08-29 14:54:30 -07:00
.all()
)
permission_dao = PermissionDAO()