Mercurial > prosody-modules
comparison mod_compat_roles/mod_compat_roles.lua @ 5098:817bc9873fc2
mod_compat_roles: Fix permission checks/roles to be per-host as intended
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 29 Nov 2022 11:38:28 +0000 |
parents | d414fa8b37dc |
children | f03f4ec859a3 |
comparison
equal
deleted
inserted
replaced
5097:d414fa8b37dc | 5098:817bc9873fc2 |
---|---|
26 | 26 |
27 local function get_user_role_name(username, host) | 27 local function get_user_role_name(username, host) |
28 return get_jid_role_name(username.."@"..host, host); | 28 return get_jid_role_name(username.."@"..host, host); |
29 end | 29 end |
30 | 30 |
31 -- permissions[host][permission_name] = permitted_role_name | 31 -- permissions[host][role_name][permission_name] = is_permitted |
32 local permissions = {}; | 32 local permissions = {}; |
33 | 33 |
34 local function role_may(role_name, permission) | 34 local function role_may(host, role_name, permission) |
35 local role_permissions = permissions[role_name]; | 35 local host_roles = permissions[host]; |
36 if not host_roles then | |
37 return false; | |
38 end | |
39 local role_permissions = host_roles[role_name]; | |
36 if not role_permissions then | 40 if not role_permissions then |
37 return false; | 41 return false; |
38 end | 42 end |
39 return not not permissions[role_name][permission]; | 43 return not not permissions[role_name][permission]; |
40 end | 44 end |
54 if not role then | 58 if not role then |
55 self:log("debug", "Access denied: JID <%s> may not %s (no role found)", context, action); | 59 self:log("debug", "Access denied: JID <%s> may not %s (no role found)", context, action); |
56 return false; | 60 return false; |
57 end | 61 end |
58 | 62 |
59 local permit = role_may(role, action); | 63 local permit = role_may(self.host, role, action); |
60 if not permit then | 64 if not permit then |
61 self:log("debug", "Access denied: JID <%s> may not %s (not permitted by role %s)", context, action, role.name); | 65 self:log("debug", "Access denied: JID <%s> may not %s (not permitted by role %s)", context, action, role.name); |
62 end | 66 end |
63 return permit; | 67 return permit; |
64 end | 68 end |
72 local role_name = get_jid_role_name(actor_jid); | 76 local role_name = get_jid_role_name(actor_jid); |
73 if not role_name then | 77 if not role_name then |
74 self:log("debug", "Access denied: JID <%s> may not %s (no role found)", actor_jid, action); | 78 self:log("debug", "Access denied: JID <%s> may not %s (no role found)", actor_jid, action); |
75 return false; | 79 return false; |
76 end | 80 end |
77 local permit = role_may(role_name, action, context); | 81 local permit = role_may(self.host, role_name, action, context); |
78 if not permit then | 82 if not permit then |
79 self:log("debug", "Access denied: JID <%s> may not %s (not permitted by role %s)", actor_jid, action, role_name); | 83 self:log("debug", "Access denied: JID <%s> may not %s (not permitted by role %s)", actor_jid, action, role_name); |
80 end | 84 end |
81 return permit; | 85 return permit; |
82 end | 86 end |