mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-24 01:11:38 -05:00
Merge pull request #429 from alphagov/refactor-query-filters
Refactor permissions dao
This commit is contained in:
@@ -65,7 +65,6 @@ def create_app(app_name=None):
|
||||
from app.job.rest import job as job_blueprint
|
||||
from app.notifications.rest import notifications as notifications_blueprint
|
||||
from app.invite.rest import invite as invite_blueprint
|
||||
from app.permission.rest import permission as permission_blueprint
|
||||
from app.accept_invite.rest import accept_invite
|
||||
from app.notifications_statistics.rest import notifications_statistics as notifications_statistics_blueprint
|
||||
from app.template_statistics.rest import template_statistics as template_statistics_blueprint
|
||||
@@ -79,7 +78,6 @@ def create_app(app_name=None):
|
||||
application.register_blueprint(notifications_blueprint)
|
||||
application.register_blueprint(job_blueprint)
|
||||
application.register_blueprint(invite_blueprint)
|
||||
application.register_blueprint(permission_blueprint, url_prefix='/permission')
|
||||
application.register_blueprint(accept_invite, url_prefix='/invite')
|
||||
application.register_blueprint(notifications_statistics_blueprint)
|
||||
application.register_blueprint(template_statistics_blueprint)
|
||||
|
||||
@@ -32,30 +32,6 @@ class PermissionDAO(DAOClass):
|
||||
class Meta:
|
||||
model = Permission
|
||||
|
||||
# TODO rework this as last filter wins, whereas what is needed is
|
||||
# append to filter so that semantics are 'and'
|
||||
def get_query(self, filter_by_dict=None):
|
||||
if filter_by_dict is None:
|
||||
filter_by_dict = MultiDict()
|
||||
else:
|
||||
filter_by_dict = MultiDict(filter_by_dict)
|
||||
query = self.Meta.model.query
|
||||
if 'id' in filter_by_dict:
|
||||
query = query.filter(Permission.id.in_(filter_by_dict.getlist('id')))
|
||||
if 'service' in filter_by_dict:
|
||||
service_ids = filter_by_dict.getlist('service')
|
||||
if len(service_ids) == 1:
|
||||
query.filter_by(service=Service.query.get(service_ids[0]))
|
||||
# TODO the join method for multiple services
|
||||
if 'user' in filter_by_dict:
|
||||
user_ids = filter_by_dict.getlist('user')
|
||||
if len(user_ids) == 1:
|
||||
query = query.filter_by(user=User.query.get(user_ids[0]))
|
||||
# TODO the join method for multiple users
|
||||
if 'permission' in filter_by_dict:
|
||||
query = query.filter(Permission.permission.in_(filter_by_dict.getlist('permission')))
|
||||
return query
|
||||
|
||||
def add_default_service_permissions_for_user(self, user, service):
|
||||
for name in default_service_permissions:
|
||||
permission = Permission(permission=name, user=user, service=service)
|
||||
@@ -82,5 +58,8 @@ class PermissionDAO(DAOClass):
|
||||
if _commit:
|
||||
db.session.commit()
|
||||
|
||||
def get_permissions_by_user_id(self, user_id):
|
||||
return self.Meta.model.query.filter_by(user_id=user_id).all()
|
||||
|
||||
|
||||
permission_dao = PermissionDAO()
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
from flask import (
|
||||
jsonify,
|
||||
request,
|
||||
Blueprint
|
||||
)
|
||||
|
||||
from app.schemas import permission_schema
|
||||
from app.errors import register_errors
|
||||
from app.dao.permissions_dao import permission_dao
|
||||
|
||||
permission = Blueprint('permission', __name__)
|
||||
register_errors(permission)
|
||||
|
||||
|
||||
@permission.route('', methods=['GET'])
|
||||
def get_permissions():
|
||||
data = permission_schema.dump(permission_dao.get_query(filter_by_dict=request.args), many=True).data
|
||||
return jsonify(data=data)
|
||||
|
||||
|
||||
@permission.route('/<permission_id>', methods=['GET'])
|
||||
def get_permission(permission_id):
|
||||
inst = permission_dao.get_query(filter_by_dict={'id': permission_id}).one()
|
||||
data = permission_schema.dump(inst).data
|
||||
return jsonify(data=data)
|
||||
@@ -74,7 +74,7 @@ class UserSchema(BaseSchema):
|
||||
|
||||
def user_permissions(self, usr):
|
||||
retval = {}
|
||||
for x in permission_dao.get_query({'user': usr.id}):
|
||||
for x in permission_dao.get_permissions_by_user_id(usr.id):
|
||||
service_id = str(x.service_id)
|
||||
if service_id not in retval:
|
||||
retval[service_id] = []
|
||||
|
||||
Reference in New Issue
Block a user