diff --git a/messaging/service/permissions.go b/messaging/service/permissions.go index 28633e4aa..4de09e8d7 100644 --- a/messaging/service/permissions.go +++ b/messaging/service/permissions.go @@ -132,7 +132,7 @@ func (p *permissions) CanJoinChannel(ch *types.Channel) bool { } func (p *permissions) CanLeaveChannel(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "leave", p.canLeaveFallback(ch)) + return p.checkAccess(ch.Resource().String(), "leave", p.allow()) } func (p *permissions) CanArchiveChannel(ch *types.Channel) bool { @@ -168,35 +168,36 @@ func (p *permissions) CanSendMessage(ch *types.Channel) bool { } func (p *permissions) CanReplyMessage(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "message.reply") + return p.checkAccess(ch.Resource().String(), "message.reply", p.allow()) } func (p *permissions) CanEmbedMessage(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "message.embed") + return p.checkAccess(ch.Resource().String(), "message.embed", p.allow()) } func (p *permissions) CanAttachMessage(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "message.attach") + return p.checkAccess(ch.Resource().String(), "message.attach", p.allow()) } func (p *permissions) CanUpdateOwnMessages(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "message.update.own", p.isChannelOwnerFallback(ch)) + return p.checkAccess(ch.Resource().String(), "message.update.own", p.allow()) } func (p *permissions) CanUpdateMessages(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "message.update.all", p.isChannelOwnerFallback(ch)) + return p.checkAccess(ch.Resource().String(), "message.update.all") } func (p *permissions) CanDeleteOwnMessages(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "message.delete.own", p.isChannelOwnerFallback(ch)) + // @todo implement + return p.checkAccess(ch.Resource().String(), "message.delete.own", p.allow()) } func (p *permissions) CanDeleteMessages(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "message.delete.all", p.isChannelOwnerFallback(ch)) + return p.checkAccess(ch.Resource().String(), "message.delete.all") } func (p *permissions) CanReactMessage(ch *types.Channel) bool { - return p.checkAccess(ch.Resource().String(), "message.react") + return p.checkAccess(ch.Resource().String(), "message.react", p.allow()) } func (p permissions) canJoinFallback(ch *types.Channel) func() internalRules.Access { @@ -233,15 +234,6 @@ func (p permissions) canSendMessagesFallback(ch *types.Channel) func() internalR } } -func (p permissions) canLeaveFallback(ch *types.Channel) func() internalRules.Access { - return func() internalRules.Access { - if ch.Member != nil && ch.Type != types.ChannelTypeGroup { - return internalRules.Allow - } - return internalRules.Deny - } -} - func (p permissions) allow() func() internalRules.Access { return func() internalRules.Access { return internalRules.Allow diff --git a/system/service/permissions.go b/system/service/permissions.go index fee470e1f..862febb45 100644 --- a/system/service/permissions.go +++ b/system/service/permissions.go @@ -93,7 +93,7 @@ func (p *permissions) CanCreateApplication() bool { } func (p *permissions) CanReadRole(rl *types.Role) bool { - return p.checkAccess(rl.Resource().String(), "read") + return p.checkAccess(rl.Resource().String(), "read", p.allow()) } func (p *permissions) CanUpdateRole(rl *types.Role) bool { @@ -109,7 +109,7 @@ func (p *permissions) CanManageRoleMembers(rl *types.Role) bool { } func (p *permissions) CanReadApplication(app *types.Application) bool { - return p.checkAccess(app.Resource().String(), "read") + return p.checkAccess(app.Resource().String(), "read", p.allow()) } func (p *permissions) CanUpdateApplication(app *types.Application) bool { @@ -127,3 +127,9 @@ func (p *permissions) checkAccess(resource string, operation string, fallbacks . } return false } + +func (p permissions) allow() func() internalRules.Access { + return func() internalRules.Access { + return internalRules.Allow + } +}