summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Goldberg <george@gberg.me>2018-05-28 14:46:52 +0100
committerMartin Kraft <mkraft@users.noreply.github.com>2018-05-28 09:46:52 -0400
commit7225abddeefb569f1f2da739211d7797b63814a2 (patch)
treed78797de6b1f888e1927efa6620cedb7004c33a0
parentbe177caf5f257c14198f4d79e993625c3c39b4ec (diff)
downloadchat-7225abddeefb569f1f2da739211d7797b63814a2.tar.gz
chat-7225abddeefb569f1f2da739211d7797b63814a2.tar.bz2
chat-7225abddeefb569f1f2da739211d7797b63814a2.zip
MM-8814: Remove implicit permission grants from post ownership. (#8391)
-rw-r--r--api4/post.go41
-rw-r--r--app/authorization.go13
2 files changed, 35 insertions, 19 deletions
diff --git a/api4/post.go b/api4/post.go
index 189edfc20..b4392a74e 100644
--- a/api4/post.go
+++ b/api4/post.go
@@ -246,11 +246,24 @@ func deletePost(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- if !c.App.SessionHasPermissionToPost(c.Session, c.Params.PostId, model.PERMISSION_DELETE_OTHERS_POSTS) {
- c.SetPermissionError(model.PERMISSION_DELETE_OTHERS_POSTS)
+ post, err := c.App.GetSinglePost(c.Params.PostId)
+ if err != nil {
+ c.SetPermissionError(model.PERMISSION_DELETE_POST)
return
}
+ if c.Session.UserId == post.UserId {
+ if !c.App.SessionHasPermissionToChannel(c.Session, post.ChannelId, model.PERMISSION_DELETE_POST) {
+ c.SetPermissionError(model.PERMISSION_DELETE_POST)
+ return
+ }
+ } else {
+ if !c.App.SessionHasPermissionToChannel(c.Session, post.ChannelId, model.PERMISSION_DELETE_OTHERS_POSTS) {
+ c.SetPermissionError(model.PERMISSION_DELETE_OTHERS_POSTS)
+ return
+ }
+ }
+
if _, err := c.App.DeletePost(c.Params.PostId); err != nil {
c.Err = err
return
@@ -364,11 +377,19 @@ func updatePost(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- if !c.App.SessionHasPermissionToPost(c.Session, c.Params.PostId, model.PERMISSION_EDIT_OTHERS_POSTS) {
- c.SetPermissionError(model.PERMISSION_EDIT_OTHERS_POSTS)
+ originalPost, err := c.App.GetSinglePost(c.Params.PostId)
+ if err != nil {
+ c.SetPermissionError(model.PERMISSION_EDIT_POST)
return
}
+ if c.Session.UserId != originalPost.UserId {
+ if !c.App.SessionHasPermissionToChannelByPost(c.Session, c.Params.PostId, model.PERMISSION_EDIT_OTHERS_POSTS) {
+ c.SetPermissionError(model.PERMISSION_EDIT_OTHERS_POSTS)
+ return
+ }
+ }
+
post.Id = c.Params.PostId
rpost, err := c.App.UpdatePost(c.App.PostWithProxyRemovedFromImageURLs(post), false)
@@ -398,11 +419,19 @@ func patchPost(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- if !c.App.SessionHasPermissionToPost(c.Session, c.Params.PostId, model.PERMISSION_EDIT_OTHERS_POSTS) {
- c.SetPermissionError(model.PERMISSION_EDIT_OTHERS_POSTS)
+ originalPost, err := c.App.GetSinglePost(c.Params.PostId)
+ if err != nil {
+ c.SetPermissionError(model.PERMISSION_EDIT_POST)
return
}
+ if c.Session.UserId != originalPost.UserId {
+ if !c.App.SessionHasPermissionToChannelByPost(c.Session, c.Params.PostId, model.PERMISSION_EDIT_OTHERS_POSTS) {
+ c.SetPermissionError(model.PERMISSION_EDIT_OTHERS_POSTS)
+ return
+ }
+ }
+
patchedPost, err := c.App.PatchPost(c.Params.PostId, c.App.PostPatchWithProxyRemovedFromImageURLs(post))
if err != nil {
c.Err = err
diff --git a/app/authorization.go b/app/authorization.go
index 57a38c199..3de50e27b 100644
--- a/app/authorization.go
+++ b/app/authorization.go
@@ -94,19 +94,6 @@ func (a *App) SessionHasPermissionToUser(session model.Session, userId string) b
return false
}
-func (a *App) SessionHasPermissionToPost(session model.Session, postId string, permission *model.Permission) bool {
- post, err := a.GetSinglePost(postId)
- if err != nil {
- return false
- }
-
- if post.UserId == session.UserId {
- return true
- }
-
- return a.SessionHasPermissionToChannel(session, post.ChannelId, permission)
-}
-
func (a *App) HasPermissionTo(askingUserId string, permission *model.Permission) bool {
user, err := a.GetUser(askingUserId)
if err != nil {