diff --git a/src/requests/list.cr b/src/requests/list.cr index 423ad76..edd05d1 100644 --- a/src/requests/list.cr +++ b/src/requests/list.cr @@ -11,9 +11,21 @@ class AuthD::Request @token.try do |token| user = authd.get_user_from_token token - return Response::Error.new "unauthorized (user not found from token)" + return Response::Error.new "unauthorized (user not found from token)" unless user - return Response::Error.new "unauthorized (user not in authd group)" unless user.permissions["authd"]?.try(&.["*"].>=(User::PermissionLevel::Read)) + # Test if the user is a moderator. + if permissions = user.permissions["authd"]? + if rights = permissions["*"]? + if rights >= User::PermissionLevel::Read + else + raise AdminAuthorizationException.new "unauthorized (insufficient rights on '*')" + end + else + raise AdminAuthorizationException.new "unauthorized (no rights on '*')" + end + else + raise AdminAuthorizationException.new "unauthorized (user not in authd group)" + end end @key.try do |key|