fix(mail): split "l" and "r" ACL attributes for IMAP mailboxes

Fixes #4983
This commit is contained in:
Francis Lachapelle
2021-09-10 16:57:15 -04:00
parent d1fc15b3a4
commit 08581eefab
6 changed files with 29 additions and 10 deletions

View File

@@ -1326,6 +1326,8 @@ static NSComparisonResult _compareFetchResultsByUID (id entry1, id entry2, NSArr
switch ([imapAcls characterAtIndex: count])
{
case 'l':
[SOGoAcls addObjectUniquely: SOGoRole_FolderViewer];
break;
case 'r':
[SOGoAcls addObjectUniquely: SOGoRole_ObjectViewer];
break;
@@ -1408,11 +1410,10 @@ static NSComparisonResult _compareFetchResultsByUID (id entry1, id entry2, NSArr
acls = [sogoAcls objectEnumerator];
while ((currentAcl = [acls nextObject]))
{
if ([currentAcl isEqualToString: SOGoRole_ObjectViewer])
{
[imapAcls appendFormat: @"lr"];
character = 0;
}
if ([currentAcl isEqualToString: SOGoRole_FolderViewer])
character = 'l';
else if ([currentAcl isEqualToString: SOGoRole_ObjectViewer])
character = 'r';
else if ([currentAcl isEqualToString: SOGoMailRole_SeenKeeper])
character = 's';
else if ([currentAcl isEqualToString: SOGoMailRole_Writer])

View File

@@ -1,8 +1,6 @@
/* SOGoPermissions.h - this file is part of SOGo
*
* Copyright (C) 2006 Inverse inc.
*
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
* Copyright (C) 2006-2021 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@@ -1,6 +1,6 @@
/* SOGoPermissions.m - this file is part of SOGo
*
* Copyright (C) 2006-2014 Inverse inc.
* Copyright (C) 2006-2021 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,6 +28,7 @@ NSString *SOGoRole_ObjectEditor = @"ObjectEditor";
NSString *SOGoRole_FolderCreator = @"FolderCreator";
NSString *SOGoRole_FolderEraser = @"FolderEraser";
NSString *SOGoRole_FolderViewer = @"FolderViewer";
NSString *SOGoRole_AuthorizedSubscriber = @"AuthorizedSubscriber";
NSString *SOGoRole_PublicUser = @"PublicUser";

View File

@@ -82,7 +82,7 @@
"Access rights to" = "Access rights to";
"For user" = "For user";
"Any Authenticated User" = "Any Authenticated User";
"List and see this folder" = "List and see this folder";
"View this folder" = "View this folder";
"Read mails from this folder" = "Read mails from this folder";
"Mark mails read and unread" = "Mark mails read and unread";
"Modify the flags of the mails in this folder" = "Modify the flags of the mails in this folder";

View File

@@ -36,6 +36,11 @@
return ([account imapAclStyle] == rfc4314);
}
- (BOOL) userCanViewFolder
{
return [userRights containsObject: SOGoRole_FolderViewer];
}
- (void) setUserCanReadMails: (BOOL) userCanReadMails
{
if (userCanReadMails)
@@ -169,6 +174,7 @@
- (NSDictionary *) userRightsForObject
{
return [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:[self userCanViewFolder]], @"userCanViewFolder",
[NSNumber numberWithBool:[self userCanReadMails]], @"userCanReadMails",
[NSNumber numberWithBool:[self userCanMarkMailsRead]], @"userCanMarkMailsRead",
[NSNumber numberWithBool:[self userCanWriteMails]], @"userCanWriteMails",
@@ -184,6 +190,11 @@
- (void) updateRights: (NSDictionary *) newRights
{
if ([[newRights objectForKey: @"userCanViewFolder"] boolValue])
[self appendRight: SOGoRole_FolderViewer];
else
[self removeRight: SOGoRole_FolderViewer];
if ([[newRights objectForKey: @"userCanReadMails"] boolValue])
[self appendRight: SOGoRole_ObjectViewer];
else

View File

@@ -9,6 +9,14 @@
<div class="mailUserRights" layout="column">
<md-checkbox name="userCanViewFolder"
ng-model="acl.selectedUser.rights.userCanViewFolder"
ng-change="acl.confirmChange(acl.selectedUser)"
ng-true-value="1"
ng-false-value="0">
<var:string label:value="View this folder" />
</md-checkbox>
<md-checkbox name="userCanReadMails"
ng-model="acl.selectedUser.rights.userCanReadMails"
ng-change="acl.confirmChange(acl.selectedUser)"