Merge pull request #3277 from alphagov/bcast-service-permissions

Remove user permissions if service becomes a broadcast service
This commit is contained in:
Katie Smith
2021-07-09 09:12:45 +01:00
committed by GitHub
3 changed files with 51 additions and 0 deletions

View File

@@ -7,7 +7,10 @@ from app.dao.dao_utils import autocommit, version_class
from app.models import (
BROADCAST_TYPE,
EMAIL_AUTH_TYPE,
INVITE_PENDING,
InvitedUser,
Organisation,
Permission,
Service,
ServiceBroadcastSettings,
ServicePermission,
@@ -53,6 +56,13 @@ def set_broadcast_service_type(service, service_mode, broadcast_channel, provide
service.restricted = True
service.go_live_at = None
# Remove all user permissions for the service users and invited users
Permission.query.filter_by(service_id=service.id).delete()
InvitedUser.query.filter_by(
service_id=service.id,
status=INVITE_PENDING
).update({'permissions': ''})
# Add service to organisation
organisation = Organisation.query.filter_by(
id=current_app.config['BROADCAST_ORGANISATION_ID']

View File

@@ -1115,6 +1115,7 @@ def set_as_broadcast_service(service_id):
- sets the services `count_as_live` to false
- adds the service to the broadcast organisation
- puts the service into training mode or live mode
- removes all permissions from current users and invited users
"""
data = validate(request.get_json(), service_broadcast_settings_schema)
service = dao_fetch_service_by_id(service_id)

View File

@@ -4128,3 +4128,43 @@ def test_set_as_broadcast_service_updates_services_history(
new_history_records = Service.get_history_model().query.filter_by(id=sample_service.id).all()
assert len(new_history_records) == len(old_history_records) + 1
def test_set_as_broadcast_service_removes_user_permissions(
admin_request,
broadcast_organisation,
sample_service,
sample_service_full_permissions,
sample_invited_user,
):
service_user = sample_service.users[0]
# make the user a member of a second service
dao_add_user_to_service(
sample_service_full_permissions,
service_user,
permissions=[
Permission(service_id=sample_service_full_permissions.id,
user_id=service_user.id,
permission='send_emails')
]
)
assert len(service_user.get_permissions(service_id=sample_service.id)) == 8
assert len(sample_invited_user.get_permissions()) == 3
admin_request.post(
'service.set_as_broadcast_service',
service_id=sample_service.id,
_data={
'broadcast_channel': 'test',
'service_mode': 'live',
'provider_restriction': 'ee'
}
)
# The user permissions for the broadcast service get removed
assert len(service_user.get_permissions(service_id=sample_service.id)) == 0
# Permissions for users invited to the broadcast service get removed
assert sample_invited_user.permissions == ''
# Permissions for other services remain
assert len(service_user.get_permissions(service_id=sample_service_full_permissions.id)) == 1