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]
