mobile: refine allowed group actions; inactive group indicator (#852)

This commit is contained in:
JRoberts
2022-07-30 16:49:34 +04:00
committed by GitHub
parent de0f231c60
commit 1dd7520bbd
13 changed files with 110 additions and 76 deletions

View File

@@ -441,10 +441,7 @@ processChatCommand = \case
pure $ CRContactConnectionDeleted conn
CTGroup -> do
g@(Group gInfo@GroupInfo {membership} members) <- withStore $ \db -> getGroup db user chatId
let s = memberStatus membership
canDelete =
memberRole (membership :: GroupMember) == GROwner
|| (s == GSMemRemoved || s == GSMemLeft || s == GSMemGroupDeleted || s == GSMemInvited)
let canDelete = memberRole (membership :: GroupMember) == GROwner || not (memberCurrent membership)
unless canDelete $ throwChatError CEGroupUserRole
withChatLock . procCmd $ do
when (memberActive membership) . void $ sendGroupMessage gInfo members XGrpDel
@@ -745,7 +742,7 @@ processChatCommand = \case
Nothing -> throwChatError CEGroupMemberNotFound
Just m@GroupMember {memberId = mId, memberRole = mRole, memberStatus = mStatus, memberProfile} -> do
let userRole = memberRole (membership :: GroupMember)
canRemove = userRole >= GRAdmin && userRole >= mRole
canRemove = userRole >= GRAdmin && userRole >= mRole && memberCurrent membership
unless canRemove $ throwChatError CEGroupUserRole
withChatLock . procCmd $ do
when (mStatus /= GSMemInvited) $ do