Ignore default banned rights for channel admins.

Fixes #5640.
This commit is contained in:
John Preston 2019-02-01 15:50:57 +03:00
parent 35e5c2329b
commit f0c4868b3e
2 changed files with 13 additions and 11 deletions

View File

@ -212,7 +212,9 @@ void EditAdminBox::prepare() {
const auto chat = peer()->asChat();
const auto channel = peer()->asChannel();
const auto prepareRights = hadRights ? _oldRights : Defaults(peer());
const auto disabledByDefaults = DisabledByDefaultRestrictions(peer());
const auto disabledByDefaults = (channel && !channel->isMegagroup())
? MTPDchatAdminRights::Flags(0)
: DisabledByDefaultRestrictions(peer());
const auto filterByMyRights = canSave()
&& !hadRights
&& channel

View File

@ -350,16 +350,12 @@ bool PeerData::canPinMessages() const {
if (const auto user = asUser()) {
return user->fullFlags() & MTPDuserFull::Flag::f_can_pin_message;
} else if (const auto chat = asChat()) {
return chat->amIn()
&& ((chat->adminRights() & ChatAdminRight::f_pin_messages)
|| chat->amCreator());
return chat->amIn() && !chat->amRestricted(ChatRestriction::f_pin_messages);
} else if (const auto channel = asChannel()) {
if (channel->isMegagroup()) {
return (channel->adminRights() & ChatAdminRight::f_pin_messages)
|| channel->amCreator();
}
return (channel->adminRights() & ChatAdminRight::f_edit_messages)
|| channel->amCreator();
return channel->isMegagroup()
? !channel->amRestricted(ChatRestriction::f_pin_messages)
: ((channel->adminRights() & ChatAdminRight::f_edit_messages)
|| channel->amCreator());
}
Unexpected("Peer type in PeerData::canPinMessages.");
}
@ -613,9 +609,13 @@ Data::RestrictionCheckResult PeerData::amRestricted(
}
};
if (const auto channel = asChannel()) {
const auto defaultRestrictions = channel->defaultRestrictions()
| (channel->isPublic()
? (ChatRestriction::f_pin_messages | ChatRestriction::f_change_info)
: ChatRestrictions(0));
return (channel->amCreator() || allowByAdminRights(right, channel))
? Result::Allowed()
: (channel->defaultRestrictions() & right)
: (defaultRestrictions & right)
? Result::WithEveryone()
: (channel->restrictions() & right)
? Result::Explicit()