mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
MM-54774 - update session roles when promote/demote guests (#25156)
* update session roles from user roles. * update so user is not retrieved again * return error, rather than log warning * Update session.go Fix bad merge --------- Co-authored-by: Mattermost Build <build@mattermost.com>
This commit is contained in:
parent
a6ba7163c8
commit
818a48190e
@ -223,8 +223,13 @@ func (ps *PlatformService) ExtendSessionExpiry(session *model.Session, newExpiry
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ps *PlatformService) UpdateSessionsIsGuest(c request.CTX, userID string, isGuest bool) error {
|
||||
sessions, err := ps.GetSessions(c, userID)
|
||||
func (ps *PlatformService) UpdateSessionsIsGuest(c request.CTX, user *model.User, isGuest bool) error {
|
||||
sessions, err := ps.GetSessions(c, user.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = ps.Store.Session().UpdateRoles(user.Id, user.GetRawRoles())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -132,3 +132,59 @@ func TestOAuthRevokeAccessToken(t *testing.T) {
|
||||
err = th.Service.RevokeAccessToken(th.Context, accessData.Token)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestUpdateSessionsIsGuest(t *testing.T) {
|
||||
th := Setup(t)
|
||||
defer th.TearDown()
|
||||
|
||||
t.Run("Test session is demoted", func(t *testing.T) {
|
||||
user := th.CreateUserOrGuest(false)
|
||||
|
||||
session := &model.Session{}
|
||||
session.CreateAt = model.GetMillis()
|
||||
session.UserId = user.Id
|
||||
session.Token = model.NewId()
|
||||
session.Roles = "fake_role"
|
||||
th.Service.SetSessionExpireInHours(session, 24)
|
||||
|
||||
session, _ = th.Service.CreateSession(th.Context, session)
|
||||
|
||||
demotedUser, err := th.Service.Store.User().DemoteUserToGuest(user.Id)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, model.SystemGuestRoleId, demotedUser.Roles)
|
||||
|
||||
err = th.Service.UpdateSessionsIsGuest(th.Context, demotedUser, true)
|
||||
require.NoError(t, err)
|
||||
|
||||
session, err = th.Service.GetSession(th.Context, session.Id)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, model.SystemGuestRoleId, session.Roles)
|
||||
require.Equal(t, "true", session.Props[model.SessionPropIsGuest])
|
||||
})
|
||||
|
||||
t.Run("Test session is promoted", func(t *testing.T) {
|
||||
user := th.CreateUserOrGuest(true)
|
||||
|
||||
session := &model.Session{}
|
||||
session.CreateAt = model.GetMillis()
|
||||
session.UserId = user.Id
|
||||
session.Token = model.NewId()
|
||||
session.Roles = "fake_role"
|
||||
th.Service.SetSessionExpireInHours(session, 24)
|
||||
|
||||
session, _ = th.Service.CreateSession(th.Context, session)
|
||||
|
||||
err := th.Service.Store.User().PromoteGuestToUser(user.Id)
|
||||
require.NoError(t, err)
|
||||
|
||||
promotedUser, err := th.Service.Store.User().Get(th.Context.Context(), user.Id)
|
||||
require.NoError(t, err)
|
||||
err = th.Service.UpdateSessionsIsGuest(th.Context, promotedUser, false)
|
||||
require.NoError(t, err)
|
||||
|
||||
session, err = th.Service.GetSession(th.Context, session.Id)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, model.SystemUserRoleId, session.Roles)
|
||||
require.Equal(t, "false", session.Props[model.SessionPropIsGuest])
|
||||
})
|
||||
}
|
||||
|
@ -2322,7 +2322,7 @@ func (a *App) PromoteGuestToUser(c request.CTX, user *model.User, requestorId st
|
||||
c.Logger().Warn("Failed to get user on promote guest to user", mlog.Err(err))
|
||||
} else {
|
||||
a.sendUpdatedUserEvent(*promotedUser)
|
||||
if uErr := a.ch.srv.platform.UpdateSessionsIsGuest(c, promotedUser.Id, promotedUser.IsGuest()); uErr != nil {
|
||||
if uErr := a.ch.srv.platform.UpdateSessionsIsGuest(c, promotedUser, promotedUser.IsGuest()); uErr != nil {
|
||||
c.Logger().Warn("Unable to update user sessions", mlog.String("user_id", promotedUser.Id), mlog.Err(uErr))
|
||||
}
|
||||
}
|
||||
@ -2367,7 +2367,7 @@ func (a *App) DemoteUserToGuest(c request.CTX, user *model.User) *model.AppError
|
||||
}
|
||||
|
||||
a.sendUpdatedUserEvent(*demotedUser)
|
||||
if uErr := a.ch.srv.platform.UpdateSessionsIsGuest(c, demotedUser.Id, demotedUser.IsGuest()); uErr != nil {
|
||||
if uErr := a.ch.srv.platform.UpdateSessionsIsGuest(c, demotedUser, demotedUser.IsGuest()); uErr != nil {
|
||||
c.Logger().Warn("Unable to update user sessions", mlog.String("user_id", demotedUser.Id), mlog.Err(uErr))
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user