Fix pending member group edit rights.
parent
845f6a0a93
commit
b0650b926b
|
@ -739,6 +739,15 @@ public final class GroupDatabase extends Database {
|
||||||
return isV2Group() && requireV2GroupProperties().isAdmin(recipient);
|
return isV2Group() && requireV2GroupProperties().isAdmin(recipient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MemberLevel memberLevel(@NonNull Recipient recipient) {
|
||||||
|
if (isV2Group()) {
|
||||||
|
return requireV2GroupProperties().memberLevel(recipient);
|
||||||
|
} else {
|
||||||
|
return members.contains(recipient.getId()) ? MemberLevel.FULL_MEMBER
|
||||||
|
: MemberLevel.NOT_A_MEMBER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Who is allowed to add to the membership of this group.
|
* Who is allowed to add to the membership of this group.
|
||||||
*/
|
*/
|
||||||
|
@ -817,6 +826,18 @@ public final class GroupDatabase extends Database {
|
||||||
.or(false);
|
.or(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MemberLevel memberLevel(@NonNull Recipient recipient) {
|
||||||
|
DecryptedGroup decryptedGroup = getDecryptedGroup();
|
||||||
|
|
||||||
|
return DecryptedGroupUtil.findMemberByUuid(decryptedGroup.getMembersList(), recipient.getUuid().get())
|
||||||
|
.transform(member -> member.getRole() == Member.Role.ADMINISTRATOR
|
||||||
|
? MemberLevel.ADMINISTRATOR
|
||||||
|
: MemberLevel.FULL_MEMBER)
|
||||||
|
.or(() -> DecryptedGroupUtil.findPendingByUuid(decryptedGroup.getPendingMembersList(), recipient.getUuid().get())
|
||||||
|
.isPresent() ? MemberLevel.PENDING_MEMBER
|
||||||
|
: MemberLevel.NOT_A_MEMBER);
|
||||||
|
}
|
||||||
|
|
||||||
public List<Recipient> getMemberRecipients(@NonNull MemberSet memberSet) {
|
public List<Recipient> getMemberRecipients(@NonNull MemberSet memberSet) {
|
||||||
return Recipient.resolvedList(getMemberRecipientIds(memberSet));
|
return Recipient.resolvedList(getMemberRecipientIds(memberSet));
|
||||||
}
|
}
|
||||||
|
@ -868,4 +889,21 @@ public final class GroupDatabase extends Database {
|
||||||
this.includePending = includePending;
|
this.includePending = includePending;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum MemberLevel {
|
||||||
|
NOT_A_MEMBER(false),
|
||||||
|
PENDING_MEMBER(false),
|
||||||
|
FULL_MEMBER(true),
|
||||||
|
ADMINISTRATOR(true);
|
||||||
|
|
||||||
|
private final boolean inGroup;
|
||||||
|
|
||||||
|
MemberLevel(boolean inGroup){
|
||||||
|
this.inGroup = inGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInGroup() {
|
||||||
|
return inGroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,28 +145,15 @@ public final class LiveGroup {
|
||||||
fullMemberCount);
|
fullMemberCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
private LiveData<MemberLevel> selfMemberLevel() {
|
private LiveData<GroupDatabase.MemberLevel> selfMemberLevel() {
|
||||||
return Transformations.map(groupRecord, g -> {
|
return Transformations.map(groupRecord, g -> g.memberLevel(Recipient.self()));
|
||||||
if (g.isAdmin(Recipient.self())) {
|
|
||||||
return MemberLevel.ADMIN;
|
|
||||||
} else {
|
|
||||||
return g.isActive() ? MemberLevel.MEMBER
|
|
||||||
: MemberLevel.NOT_A_MEMBER;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean applyAccessControl(@NonNull MemberLevel memberLevel, @NonNull GroupAccessControl rights) {
|
private static boolean applyAccessControl(@NonNull GroupDatabase.MemberLevel memberLevel, @NonNull GroupAccessControl rights) {
|
||||||
switch (rights) {
|
switch (rights) {
|
||||||
case ALL_MEMBERS: return memberLevel != MemberLevel.NOT_A_MEMBER;
|
case ALL_MEMBERS: return memberLevel.isInGroup();
|
||||||
case ONLY_ADMINS: return memberLevel == MemberLevel.ADMIN;
|
case ONLY_ADMINS: return memberLevel == GroupDatabase.MemberLevel.ADMINISTRATOR;
|
||||||
default: throw new AssertionError();
|
default: throw new AssertionError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum MemberLevel {
|
|
||||||
NOT_A_MEMBER,
|
|
||||||
MEMBER,
|
|
||||||
ADMIN
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue