summaryrefslogtreecommitdiffstats
path: root/api4/emoji.go
diff options
context:
space:
mode:
authorJesús Espino <jespinog@gmail.com>2018-05-29 16:58:12 +0200
committerGeorge Goldberg <george@gberg.me>2018-05-29 15:58:12 +0100
commite88fe4bb1dea4918284ee3c6e5aee5a8497ff2b8 (patch)
tree480a5b91b37e2728ea151e3b7ad521aaf4402697 /api4/emoji.go
parentbf4cefc3496686850757b2d44219ea2425871dda (diff)
downloadchat-e88fe4bb1dea4918284ee3c6e5aee5a8497ff2b8.tar.gz
chat-e88fe4bb1dea4918284ee3c6e5aee5a8497ff2b8.tar.bz2
chat-e88fe4bb1dea4918284ee3c6e5aee5a8497ff2b8.zip
MM-8853: Adding MANAGE_EMOJIS and MANAGE_OTHERS_EMOJIS permissions (#8860)
* MM-8853: Adding MANAGE_EMOJIS and MANAGE_OTHERS_EMOJIS permissions * MM-8853: Removing unnecesary emoji enterprise feature * Create emojis migration * Adding MANAGE_EMOJIS and MANAGE_OTHERS_EMOJIS always to system admins * Simplifing permissions checks * Revert "Simplifing permissions checks" This reverts commit e2cafc1905fc9e20125dd9a1552d2d0c7340ae59.
Diffstat (limited to 'api4/emoji.go')
-rw-r--r--api4/emoji.go66
1 files changed, 58 insertions, 8 deletions
diff --git a/api4/emoji.go b/api4/emoji.go
index cfb5dd6ab..42f66a22a 100644
--- a/api4/emoji.go
+++ b/api4/emoji.go
@@ -33,12 +33,6 @@ func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- if emojiInterface := c.App.Emoji; emojiInterface != nil &&
- !emojiInterface.CanUserCreateEmoji(c.Session.Roles, c.Session.TeamMembers) {
- c.Err = model.NewAppError("getEmoji", "api.emoji.disabled.app_error", nil, "user_id="+c.Session.UserId, http.StatusUnauthorized)
- return
- }
-
if len(*c.App.Config().FileSettings.DriverName) == 0 {
c.Err = model.NewAppError("createEmoji", "api.emoji.storage.app_error", nil, "", http.StatusNotImplemented)
return
@@ -54,6 +48,28 @@ func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
+ // Allow any user with MANAGE_EMOJIS permission at Team level to manage emojis at system level
+ memberships, err := c.App.GetTeamMembersForUser(c.Session.UserId)
+
+ if err != nil {
+ c.Err = err
+ return
+ }
+
+ if !c.App.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_EMOJIS) {
+ hasPermission := false
+ for _, membership := range memberships {
+ if c.App.SessionHasPermissionToTeam(c.Session, membership.TeamId, model.PERMISSION_MANAGE_EMOJIS) {
+ hasPermission = true
+ break
+ }
+ }
+ if !hasPermission {
+ c.SetPermissionError(model.PERMISSION_MANAGE_EMOJIS)
+ return
+ }
+ }
+
m := r.MultipartForm
props := m.Value
@@ -110,11 +126,45 @@ func deleteEmoji(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- if c.Session.UserId != emoji.CreatorId && !c.App.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_SYSTEM) {
- c.Err = model.NewAppError("deleteImage", "api.emoji.delete.permissions.app_error", nil, "user_id="+c.Session.UserId, http.StatusUnauthorized)
+ // Allow any user with MANAGE_EMOJIS permission at Team level to manage emojis at system level
+ memberships, err := c.App.GetTeamMembersForUser(c.Session.UserId)
+
+ if err != nil {
+ c.Err = err
return
}
+ if !c.App.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_EMOJIS) {
+ hasPermission := false
+ for _, membership := range memberships {
+ if c.App.SessionHasPermissionToTeam(c.Session, membership.TeamId, model.PERMISSION_MANAGE_EMOJIS) {
+ hasPermission = true
+ break
+ }
+ }
+ if !hasPermission {
+ c.SetPermissionError(model.PERMISSION_MANAGE_EMOJIS)
+ return
+ }
+ }
+
+ if c.Session.UserId != emoji.CreatorId {
+ if !c.App.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_OTHERS_EMOJIS) {
+ hasPermission := false
+ for _, membership := range memberships {
+ if c.App.SessionHasPermissionToTeam(c.Session, membership.TeamId, model.PERMISSION_MANAGE_OTHERS_EMOJIS) {
+ hasPermission = true
+ break
+ }
+ }
+
+ if !hasPermission {
+ c.SetPermissionError(model.PERMISSION_MANAGE_OTHERS_EMOJIS)
+ return
+ }
+ }
+ }
+
err = c.App.DeleteEmoji(emoji)
if err != nil {
c.Err = err