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 chat = peer()->asChat();
const auto channel = peer()->asChannel(); const auto channel = peer()->asChannel();
const auto prepareRights = hadRights ? _oldRights : Defaults(peer()); 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() const auto filterByMyRights = canSave()
&& !hadRights && !hadRights
&& channel && channel

View File

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