Add system role everyone, closes #55
This commit is contained in:
@@ -57,18 +57,20 @@ func (r *resources) Check(resource string, operation string) Access {
|
||||
}
|
||||
|
||||
func (r *resources) checkAccess(resource string, operation string) Access {
|
||||
const everyoneRoleId uint64 = 1
|
||||
user := r.identity()
|
||||
result := []Access{}
|
||||
query := []string{
|
||||
// select rules
|
||||
"select r.value from sys_rules r",
|
||||
// join members
|
||||
"inner join sys_role_member m on (m.rel_role = r.rel_role and m.rel_user=?)",
|
||||
"inner join sys_role_member m on ",
|
||||
"((m.rel_role = r.rel_role and m.rel_user=?) or (r.rel_role = ?))",
|
||||
// add conditions
|
||||
"where r.resource=? and r.operation=?",
|
||||
}
|
||||
queryString := strings.Join(query, " ")
|
||||
if err := r.db.Select(&result, queryString, user, resource, operation); err != nil {
|
||||
if err := r.db.Select(&result, queryString, user, everyoneRoleId, resource, operation); err != nil {
|
||||
// @todo: log error
|
||||
return Deny
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,62 @@
|
||||
INSERT INTO `sys_role` (`id`, `name`, `handle`) VALUES (1, 'Everyone', 'everyone');
|
||||
INSERT INTO `sys_role` (`id`, `name`, `handle`) VALUES (2, 'Administrators', 'admins');
|
||||
|
||||
-- Value: Allow (2), Deny (1), Inherit(0),
|
||||
INSERT INTO `sys_rules` (`rel_role`, `resource`, `operation`, `value`) VALUES
|
||||
-- Everyone
|
||||
(1, 'compose', 'access', 2),
|
||||
(1, 'messaging', 'access', 2),
|
||||
-- Admins
|
||||
(2, 'compose', 'namespace.create', 2),
|
||||
(2, 'compose', 'access', 2),
|
||||
(2, 'compose', 'grant', 2),
|
||||
(2, 'compose:namespace', 'page.create', 2),
|
||||
(2, 'compose:namespace', 'read', 2),
|
||||
(2, 'compose:namespace', 'update', 2),
|
||||
(2, 'compose:namespace', 'delete', 2),
|
||||
(2, 'compose:namespace', 'module.create', 2),
|
||||
(2, 'compose:namespace', 'chart.create', 2),
|
||||
(2, 'compose:namespace', 'trigger.create', 2),
|
||||
(2, 'compose:chart', 'read', 2),
|
||||
(2, 'compose:chart', 'update', 2),
|
||||
(2, 'compose:chart', 'delete', 2),
|
||||
(2, 'compose:trigger', 'read', 2),
|
||||
(2, 'compose:trigger', 'update', 2),
|
||||
(2, 'compose:trigger', 'delete', 2),
|
||||
(2, 'compose:page', 'read', 2),
|
||||
(2, 'compose:page', 'update', 2),
|
||||
(2, 'compose:page', 'delete', 2),
|
||||
(2, 'system', 'grant', 2),
|
||||
(2, 'system', 'organisation.create', 2),
|
||||
(2, 'system', 'role.create', 2),
|
||||
(2, 'system:organisation', 'access', 2),
|
||||
(2, 'system:role', 'read', 2),
|
||||
(2, 'system:role', 'update', 2),
|
||||
(2, 'system:role', 'delete', 2),
|
||||
(2, 'system:role', 'members.manage', 2),
|
||||
(2, 'messaging', 'access', 2),
|
||||
(2, 'messaging', 'grant', 2),
|
||||
(2, 'messaging', 'channel.public.create', 2),
|
||||
(2, 'messaging', 'channel.private.create', 2),
|
||||
(2, 'messaging', 'channel.direct.create', 2),
|
||||
(2, 'messaging:channel', 'update', 2),
|
||||
(2, 'messaging:channel', 'message.attach', 2),
|
||||
(2, 'messaging:channel', 'message.update.all', 2),
|
||||
(2, 'messaging:channel', 'leave', 2),
|
||||
(2, 'messaging:channel', 'webhooks.manage', 2),
|
||||
(2, 'messaging:channel', 'message.embed', 2),
|
||||
(2, 'messaging:channel', 'members.manage', 2),
|
||||
(2, 'messaging:channel', 'attachments.manage', 2),
|
||||
(2, 'messaging:channel', 'message.send', 2),
|
||||
(2, 'messaging:channel', 'message.reply', 2),
|
||||
(2, 'messaging:channel', 'read', 2),
|
||||
(2, 'messaging:channel', 'join', 2),
|
||||
(2, 'messaging:channel', 'message.update.own', 2),
|
||||
(2, 'messaging:channel', 'message.react', 2),
|
||||
(2, 'compose:module', 'read', 2),
|
||||
(2, 'compose:module', 'update', 2),
|
||||
(2, 'compose:module', 'delete', 2),
|
||||
(2, 'compose:module', 'record.create', 2),
|
||||
(2, 'compose:module', 'record.read', 2),
|
||||
(2, 'compose:module', 'record.update', 2),
|
||||
(2, 'compose:module', 'record.delete', 2);
|
||||
Reference in New Issue
Block a user