diff --git a/management/daemon.py b/management/daemon.py
index 572b6b4a..1deaa032 100755
--- a/management/daemon.py
+++ b/management/daemon.py
@@ -48,8 +48,8 @@ def authorized_personnel_only(viewfunc):
log_failed_login(request)
# Authorized to access an API view?
- if "admin" in privs:
- # Call view func.
+ if any(allowed_access in privs for allowed_access in [viewfunc.__name__, "admin"]):
+ # Call view function
return viewfunc(*args, **kwargs)
elif not error:
error = "You are not an administrator."
@@ -334,7 +334,7 @@ def ssl_get_status():
# What domains can we provision certificates for? What unexpected problems do we have?
provision, cant_provision = get_certificates_to_provision(env, show_valid_certs=False)
-
+
# What's the current status of TLS certificates on all of the domain?
domains_status = get_web_domains_info(env)
domains_status = [
diff --git a/management/mailconfig.py b/management/mailconfig.py
index 5f253c14..cb6ff3d4 100755
--- a/management/mailconfig.py
+++ b/management/mailconfig.py
@@ -391,6 +391,10 @@ def add_remove_mail_user_privilege(email, priv, action, env):
else:
return ("Invalid action.", 400)
+ # ensure admin is the only privilege if it exists
+ if "admin" in privs:
+ privs = ["admin"]
+
# commit to database
conn, c = open_database(env, with_connection=True)
c.execute("UPDATE users SET privileges=? WHERE email=?", ("\n".join(privs), email))
diff --git a/management/templates/users.html b/management/templates/users.html
index dee79d42..d1ae9cec 100644
--- a/management/templates/users.html
+++ b/management/templates/users.html
@@ -51,34 +51,34 @@