JAMES-2186 Remove isReadWrite logic from MailboxACLResolver

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b0ebcc2f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b0ebcc2f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b0ebcc2f

Branch: refs/heads/master
Commit: b0ebcc2fb2fd6ad1b36fb99c607299464d3a6323
Parents: b44dc56
Author: Luc DUZAN <[email protected]>
Authored: Mon Oct 23 14:01:52 2017 +0700
Committer: Raphael Ouazana <[email protected]>
Committed: Wed Oct 25 17:40:11 2017 +0200

----------------------------------------------------------------------
 .../james/mailbox/acl/MailboxACLResolver.java   | 39 --------------------
 .../mailbox/acl/UnionMailboxACLResolver.java    | 35 ------------------
 .../james/mailbox/store/StoreRightManager.java  | 33 ++++++++++++++++-
 3 files changed, 32 insertions(+), 75 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b0ebcc2f/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
index 88f7e39..1c7f3aa 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
@@ -56,45 +56,6 @@ public interface MailboxACLResolver {
     MailboxACL applyGlobalACL(MailboxACL resourceACL, boolean 
resourceOwnerIsGroup) throws UnsupportedRightException;
 
     /**
-     * Maps the given {@code mailboxACLRights} to READ-WRITE and READ-ONLY
-     * response codes.
-     * 
-     * From RFC 4314 section 5.2:
-     * 
-     * The server SHOULD include a READ-WRITE response code in the tagged OK
-     * response if at least one of the "i", "e", or "shared flag rights"(***) 
is
-     * granted to the current user.
-     * 
-     * The server MUST include a READ-ONLY response code in the tagged OK
-     * response to a SELECT command if none of the following rights is granted
-     * to the current user: "i", "e", and "shared flag rights"(***).
-     * 
-     * @param mailboxACLRights
-     *            the rights applicable to the user and resource in question.
-     *            This method supposes that any global ACLs were already 
applied
-     *            to the {@code mailboxACLRights} parameter before this method
-     *            is called.
-     * @param sharedFlags
-     *            From RFC 4314 section 5.2: If the ACL server implements some
-     *            flags as shared for a mailbox (i.e., the ACL for the mailbox
-     *            MAY be set up so that changes to those flags are visible to
-     *            another user), let’s call the set of rights associated with
-     *            these flags (as described in Section 4) for that mailbox
-     *            collectively as "shared flag rights". Note that the
-     *            "shared flag rights" set MAY be different for different
-     *            mailboxes.
-     * 
-     *            If the server doesn’t support "shared multiuser write 
access"
-     *            to a mailbox or doesn’t implement shared flags on the 
mailbox,
-     *            "shared flag rights" for the mailbox is defined to be the
-     *            empty set.
-     * 
-     * @return
-     * @throws UnsupportedRightException
-     */
-    boolean isReadWrite(MailboxACL.Rfc4314Rights mailboxACLRights, Flags 
sharedFlags) throws UnsupportedRightException;
-
-    /**
      * Computes a result suitable for the LISTRIGHTS IMAP command. The result 
is
      * computed regardless of mailbox. Therefore it should be viewed as a
      * general default which may be further customised depending on the given

http://git-wip-us.apache.org/repos/asf/james-project/blob/b0ebcc2f/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
index 528d6d5..78cd283 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
@@ -235,41 +235,6 @@ public class UnionMailboxACLResolver implements 
MailboxACLResolver {
     }
 
     /**
-     * @see 
org.apache.james.mailbox.acl.MailboxACLResolver#isReadWrite(org.apache.james.mailbox.model.Rfc4314Rights,
-     *      javax.mail.Flags)
-     */
-    @Override
-    public boolean isReadWrite(Rfc4314Rights Rfc4314Rights, Flags sharedFlags) 
throws UnsupportedRightException {
-        /* the two fast cases first */
-        if (Rfc4314Rights.contains(MailboxACL.Right.Insert) || 
Rfc4314Rights.contains(MailboxACL.Right.PerformExpunge)) {
-            return true;
-        }
-        /*
-         * then go through shared flags. RFC 4314 section 4:
-         * 
-         * Changing flags: STORE
-         * 
-         * - the server MUST check if the user has "t" right
-         * 
-         * - when the user modifies \Deleted flag "s" right
-         * 
-         * - when the user modifies \Seen flag "w" right - for all other 
message
-         * flags.
-         */
-        else if (sharedFlags != null) {
-            if (sharedFlags.contains(Flag.DELETED) && 
Rfc4314Rights.contains(MailboxACL.Right.DeleteMessages)) {
-                return true;
-            } else if (sharedFlags.contains(Flag.SEEN) && 
Rfc4314Rights.contains(MailboxACL.Right.WriteSeenFlag)) {
-                return true;
-            } else {
-                boolean hasWriteRight = 
Rfc4314Rights.contains(MailboxACL.Right.Write);
-                return hasWriteRight && (sharedFlags.contains(Flag.ANSWERED) 
|| sharedFlags.contains(Flag.DRAFT) || sharedFlags.contains(Flag.FLAGGED) || 
sharedFlags.contains(Flag.RECENT) || sharedFlags.contains(Flag.USER));
-            }
-        }
-        return false;
-    }
-
-    /**
      * The key point of this implementation is that it resolves everything what
      * can be resolved. Let us explain what it means in particular for the
      * implicit (global) rights included in the result:

http://git-wip-us.apache.org/repos/asf/james-project/blob/b0ebcc2f/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
index 4d67e31..00bb652 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
@@ -116,7 +116,38 @@ public class StoreRightManager implements RightManager {
     }
 
     public boolean isReadWrite(MailboxSession session, Mailbox mailbox, Flags 
sharedPermanentFlags) throws UnsupportedRightException {
-        return aclResolver.isReadWrite(myRights(mailbox, session), 
sharedPermanentFlags);
+        return isReadWrite(myRights(mailbox, session), sharedPermanentFlags);
+    }
+
+    private boolean isReadWrite(Rfc4314Rights rights, Flags 
sharedPermanentFlags) {
+        if (rights.contains(Right.Insert) || 
rights.contains(Right.PerformExpunge)) {
+            return true;
+        }
+
+        /*
+         * then go through shared flags. RFC 4314 section 4:
+         * Changing flags: STORE
+         * - the server MUST check if the user has "t" right
+         * - when the user modifies \Deleted flag "s" right
+         * - when the user modifies \Seen flag "w" right - for all other 
message flags.
+         */
+       if (sharedPermanentFlags != null) {
+            if (sharedPermanentFlags.contains(Flags.Flag.DELETED) && 
rights.contains(Right.DeleteMessages)) {
+                return true;
+            } else if (sharedPermanentFlags.contains(Flags.Flag.SEEN) && 
rights.contains(Right.WriteSeenFlag)) {
+                return true;
+            } else {
+                boolean hasWriteRight = rights.contains(Right.Write);
+                return hasWriteRight &&
+                    (sharedPermanentFlags.contains(Flags.Flag.ANSWERED) ||
+                    sharedPermanentFlags.contains(Flags.Flag.DRAFT) ||
+                    sharedPermanentFlags.contains(Flags.Flag.FLAGGED) ||
+                    sharedPermanentFlags.contains(Flags.Flag.RECENT) ||
+                    sharedPermanentFlags.contains(Flags.Flag.USER));
+            }
+        }
+
+        return false;
     }
 
     @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to