mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-23 15:57:23 -04:00
map roles and db permissions
in the db, we have several rows for single permissions - we separate `send_messages` into `send_texts`, `send_emails` and `send_letters`, and also `manage_service` into `manage_users` and `manage_settings`. But on the front end we don't do anything with this distinction. It's unhelpful for us to have to think about permissions as groups of things when we can never split them up at all. So we should combine them. This commit makes sure: * when user models are read (from JSON direct from the API), we should transform them from db permissions into roles. * when permissions are persisted (editing permissions, and creating invites), we should send db permissions to the API. All other interaction with permissions (should just be the endpoint decorator and checks in html templates generally) should use admin roles.
This commit is contained in:
@@ -47,6 +47,7 @@ def user_json(
|
||||
mobile_number='+447700900986',
|
||||
password_changed_at=None,
|
||||
permissions={generate_uuid(): [
|
||||
'view_activity',
|
||||
'send_texts',
|
||||
'send_emails',
|
||||
'send_letters',
|
||||
|
||||
@@ -3,6 +3,10 @@ from flask import request
|
||||
from werkzeug.exceptions import Forbidden, Unauthorized
|
||||
|
||||
from app.main.views.index import index
|
||||
from app.notify_client.models import (
|
||||
translate_permissions_from_admin_roles_to_db,
|
||||
translate_permissions_from_db_to_admin_roles,
|
||||
)
|
||||
from app.utils import user_has_permissions
|
||||
|
||||
|
||||
@@ -159,3 +163,15 @@ def _user_with_permissions():
|
||||
}
|
||||
user = User(user_data)
|
||||
return user
|
||||
|
||||
|
||||
def test_translate_permissions_from_db_to_admin_roles():
|
||||
db_perms = ['send_texts', 'send_emails', 'send_letters', 'manage_templates', 'some_unknown_permission']
|
||||
roles = translate_permissions_from_db_to_admin_roles(db_perms)
|
||||
assert roles == {'send_messages', 'manage_templates', 'some_unknown_permission'}
|
||||
|
||||
|
||||
def test_translate_permissions_from_admin_roles_to_db():
|
||||
roles = ['send_messages', 'manage_templates', 'some_unknown_permission']
|
||||
db_perms = translate_permissions_from_admin_roles_to_db(roles)
|
||||
assert db_perms == {'send_texts', 'send_emails', 'send_letters', 'manage_templates', 'some_unknown_permission'}
|
||||
|
||||
@@ -131,3 +131,29 @@ def test_client_passes_admin_url_when_sending_email_auth(
|
||||
'email_auth_link_host': 'http://localhost:6012',
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def test_client_converts_admin_permissions_to_db_permissions_on_edit(app_, mocker):
|
||||
mock_post = mocker.patch('app.notify_client.user_api_client.UserApiClient.post')
|
||||
|
||||
user_api_client.set_user_permissions('user_id', 'service_id', permissions={'send_messages', 'view_activity'})
|
||||
|
||||
assert sorted(mock_post.call_args[1]['data'], key=lambda x: x['permission']) == sorted([
|
||||
{'permission': 'send_texts'},
|
||||
{'permission': 'send_emails'},
|
||||
{'permission': 'send_letters'},
|
||||
{'permission': 'view_activity'},
|
||||
], key=lambda x: x['permission'])
|
||||
|
||||
|
||||
def test_client_converts_admin_permissions_to_db_permissions_on_add_to_service(app_, mocker):
|
||||
mock_post = mocker.patch('app.notify_client.user_api_client.UserApiClient.post', return_value={'data': {}})
|
||||
|
||||
user_api_client.add_user_to_service('service_id', 'user_id', permissions={'send_messages', 'view_activity'})
|
||||
|
||||
assert sorted(mock_post.call_args[1]['data'], key=lambda x: x['permission']) == sorted([
|
||||
{'permission': 'send_texts'},
|
||||
{'permission': 'send_emails'},
|
||||
{'permission': 'send_letters'},
|
||||
{'permission': 'view_activity'},
|
||||
], key=lambda x: x['permission'])
|
||||
|
||||
Reference in New Issue
Block a user