File indexing completed on 2024-05-12 05:17:22

0001 /*
0002     Copyright (c) 2009 Andras Mantia <amantia@kde.org>
0003 
0004     This library is free software; you can redistribute it and/or modify it
0005     under the terms of the GNU Library General Public License as published by
0006     the Free Software Foundation; either version 2 of the License, or (at your
0007     option) any later version.
0008 
0009     This library is distributed in the hope that it will be useful, but WITHOUT
0010     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0011     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
0012     License for more details.
0013 
0014     You should have received a copy of the GNU Library General Public License
0015     along with this library; see the file COPYING.LIB.  If not, write to the
0016     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
0017     02110-1301, USA.
0018 */
0019 
0020 #ifndef KIMAP2_GETACLJOB_H
0021 #define KIMAP2_GETACLJOB_H
0022 
0023 #include "kimap2_export.h"
0024 
0025 #include "acljobbase.h"
0026 
0027 namespace KIMAP2
0028 {
0029 
0030 class Session;
0031 struct Message;
0032 class GetAclJobPrivate;
0033 
0034 /**
0035  * Gets the ACL for a mailbox
0036  *
0037  * This job can only be run when the session is in the
0038  * authenticated (or selected) state.
0039  *
0040  * The user must have the Acl::Admin permission
0041  * on the mailbox for this job to succeed (see
0042  * MyRightsJob).
0043  *
0044  * This job requires that the server supports the ACL
0045  * capability, defined in
0046  * <a href="http://www.apps.ietf.org/rfc/rfc4314.html">RFC 4314</a>.
0047  *
0048  * The meaning of identifiers depends on the server implementation,
0049  * with the following restrictions:
0050  *
0051  * - "anyone" means any authenticated user, including anonymous
0052  * - an identifier starting with a minus sign ('-') indicates
0053  *   "negative rights": rights that should be taken away from
0054  *   matching users
0055  *
0056  * Other than the above restrictions, ACL identifiers are usually
0057  * IMAP usernames, but could potentially be group names as well.
0058  *
0059  * Note that negative rights override positive rights: if
0060  * "fred" and "-fred" are both assigned the 'w' right, the
0061  * user "fred" will not have the 'w' right.
0062  */
0063 class KIMAP2_EXPORT GetAclJob : public AclJobBase
0064 {
0065     Q_OBJECT
0066     Q_DECLARE_PRIVATE(GetAclJob)
0067 
0068     friend class SessionPrivate;
0069 
0070 public:
0071     explicit GetAclJob(Session *session);
0072     virtual ~GetAclJob();
0073 
0074     /**
0075      * The identifiers present in the ACL.
0076      *
0077      * This method will return an empty list if the job has
0078      * not yet been run.
0079      *
0080      * See the GetAclJob documentation for an explanation of
0081      * identifiers; in particular, identifiers starting with
0082      * '-' specify negative rights.
0083      */
0084     QList<QByteArray> identifiers() const;
0085     /**
0086      * Check whether an identifier has a given right set
0087      *
0088      * The result of this method is undefined if the job has
0089      * not yet completed.
0090      *
0091      * See the GetAclJob documentation for an explanation of
0092      * identifiers; in particular, identifiers starting with
0093      * '-' specify negative rights.
0094      *
0095      * Note that this will not tell you whether the net result
0096      * of all the ACL entries means that a given user has
0097      * a certain right.
0098      *
0099      * @param identifier  the identifier to check the rights for
0100      * @param right       the right to check for
0101      */
0102     bool hasRightEnabled(const QByteArray &identifier, Acl::Right right) const;
0103     /**
0104      * Get the rights associated with an identifier.
0105      *
0106      * The result of this method is undefined if the job has
0107      * not yet completed.
0108      *
0109      * See the GetAclJob documentation for an explanation of
0110      * identifiers; in particular, identifiers starting with
0111      * '-' specify negative rights.
0112      *
0113      * Note that this will not tell you the rights that a
0114      * given user will have once all the ACL entries have
0115      * been taken into account.
0116      *
0117      * @param identifier  the identifier to check the rights for
0118      */
0119     Acl::Rights rights(const QByteArray &identifier) const;
0120 
0121     /**
0122      * Gets the full access control list.
0123      *
0124      * The result of this method is undefined if the job has
0125      * not yet completed.
0126      *
0127      * See the GetAclJob documentation for an explanation of
0128      * identifiers; in particular, identifiers starting with
0129      * '-' specify negative rights.
0130      */
0131     QMap<QByteArray, Acl::Rights> allRights() const;
0132 
0133 protected:
0134     void doStart() Q_DECL_OVERRIDE;
0135     void handleResponse(const Message &response) Q_DECL_OVERRIDE;
0136 
0137 };
0138 
0139 }
0140 
0141 #endif