MM-13796: Don't allow pin/unpin in read-only town square. (#10184)
Этот коммит содержится в:
коммит произвёл
Daniel Schalla
родитель
48048f9e95
Коммит
58b2a3d16e
29
api4/post.go
29
api4/post.go
@@ -515,10 +515,37 @@ func saveIsPinnedPost(c *Context, w http.ResponseWriter, r *http.Request, isPinn
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restrict pinning if the experimental read-only-town-square setting is on.
|
||||||
|
user, err := c.App.GetUser(c.App.Session.UserId)
|
||||||
|
if err != nil {
|
||||||
|
c.Err = err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
post, err := c.App.GetSinglePost(c.Params.PostId)
|
||||||
|
if err != nil {
|
||||||
|
c.Err = err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
channel, err := c.App.GetChannel(post.ChannelId)
|
||||||
|
if err != nil {
|
||||||
|
c.Err = err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.App.License() != nil &&
|
||||||
|
*c.App.Config().TeamSettings.ExperimentalTownSquareIsReadOnly &&
|
||||||
|
channel.Name == model.DEFAULT_CHANNEL &&
|
||||||
|
!c.App.RolesGrantPermission(user.GetRoles(), model.PERMISSION_MANAGE_SYSTEM.Id) {
|
||||||
|
c.Err = model.NewAppError("saveIsPinnedPost", "api.post.save_is_pinned_post.town_square_read_only", nil, "", http.StatusForbidden)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
patch := &model.PostPatch{}
|
patch := &model.PostPatch{}
|
||||||
patch.IsPinned = model.NewBool(isPinned)
|
patch.IsPinned = model.NewBool(isPinned)
|
||||||
|
|
||||||
_, err := c.App.PatchPost(c.Params.PostId, patch)
|
_, err = c.App.PatchPost(c.Params.PostId, patch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Err = err
|
c.Err = err
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -740,6 +740,22 @@ func TestPinPost(t *testing.T) {
|
|||||||
_, resp = Client.PinPost(GenerateTestId())
|
_, resp = Client.PinPost(GenerateTestId())
|
||||||
CheckForbiddenStatus(t, resp)
|
CheckForbiddenStatus(t, resp)
|
||||||
|
|
||||||
|
t.Run("unable-to-pin-post-in-read-only-town-square", func(t *testing.T) {
|
||||||
|
townSquareIsReadOnly := *th.App.GetConfig().TeamSettings.ExperimentalTownSquareIsReadOnly
|
||||||
|
th.App.SetLicense(model.NewTestLicense())
|
||||||
|
th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.ExperimentalTownSquareIsReadOnly = true })
|
||||||
|
|
||||||
|
defer th.App.RemoveLicense()
|
||||||
|
defer th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.ExperimentalTownSquareIsReadOnly = townSquareIsReadOnly })
|
||||||
|
|
||||||
|
channel, err := th.App.GetChannelByName("town-square", th.BasicTeam.Id, true)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
post := th.CreatePostWithClient(th.SystemAdminClient, channel)
|
||||||
|
|
||||||
|
_, resp := Client.PinPost(post.Id)
|
||||||
|
CheckForbiddenStatus(t, resp)
|
||||||
|
})
|
||||||
|
|
||||||
Client.Logout()
|
Client.Logout()
|
||||||
_, resp = Client.PinPost(post.Id)
|
_, resp = Client.PinPost(post.Id)
|
||||||
CheckUnauthorizedStatus(t, resp)
|
CheckUnauthorizedStatus(t, resp)
|
||||||
|
|||||||
@@ -1448,6 +1448,10 @@
|
|||||||
"id": "api.post.create_post.town_square_read_only",
|
"id": "api.post.create_post.town_square_read_only",
|
||||||
"translation": "This channel is read-only. Only members with permission can post here."
|
"translation": "This channel is read-only. Only members with permission can post here."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "api.post.save_is_pinned_post.town_square_read_only",
|
||||||
|
"translation": "This channel is read-only. Only members with permission can pin or unpin posts here."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "api.post.create_webhook_post.creating.app_error",
|
"id": "api.post.create_webhook_post.creating.app_error",
|
||||||
"translation": "Error creating post"
|
"translation": "Error creating post"
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user