File indexing completed on 2024-05-12 04:46:01

0001 #pragma once
0002 
0003 #include <QObject>
0004 #include <QUrl>
0005 #include <QFileDevice>
0006 
0007 class Permission : public QObject
0008 {
0009     Q_OBJECT
0010     Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
0011     Q_PROPERTY(UserType user READ user WRITE setUser NOTIFY userChanged)
0012     Q_PROPERTY(bool read READ read WRITE setRead NOTIFY readChanged)
0013     Q_PROPERTY(bool write READ write WRITE setWrite NOTIFY writeChanged)
0014     Q_PROPERTY(bool execute READ execute WRITE setExecute NOTIFY executeChanged)
0015 
0016 public:
0017     enum PermissionType
0018     {
0019         READ,
0020         WRITE,
0021         EXECUTE,
0022         NONE
0023     };
0024     Q_ENUM(PermissionType)
0025 
0026     enum UserType
0027     {
0028         OWNER,
0029         GROUP,
0030         OTHER
0031     };
0032     Q_ENUM(UserType)
0033 
0034     explicit Permission(QObject *parent = nullptr);
0035 
0036     const QUrl &url() const;
0037     void setUrl(const QUrl &newUrl);
0038     Permission::PermissionType type() const;
0039     void setType(PermissionType newType);
0040 
0041     Permission::UserType user() const;
0042     void setUser(UserType newUser);
0043 
0044     bool read() const;
0045     void setRead(bool newRead);
0046 
0047     bool write() const;
0048     void setWrite(bool newWrite);
0049 
0050     bool execute() const;
0051     void setExecute(bool newExecute);
0052 
0053 private:
0054     QUrl m_url;
0055     PermissionType m_type;
0056     UserType m_user;
0057 
0058     void setData();
0059     static  bool checkPermission(const QUrl & url, const Permission::UserType &user, const Permission::PermissionType &type);
0060     static bool setPermission(const QUrl &url,  const Permission::UserType &user, const PermissionType &key, const bool &state);
0061     bool m_read = false;
0062 
0063     bool m_write = false;
0064 
0065     bool m_execute = false;
0066 
0067 Q_SIGNALS:
0068     void urlChanged();
0069     void typeChanged();
0070     void userChanged();
0071     void readChanged();
0072     void writeChanged();
0073     void executeChanged();
0074 };
0075 
0076 class FileProperties : public QObject
0077 {
0078     Q_OBJECT
0079     Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
0080     Q_PROPERTY(QString group READ group WRITE setGroup NOTIFY groupChanged)
0081     Q_PROPERTY(QString owner READ owner WRITE setOwner NOTIFY ownerChanged)
0082     Q_PROPERTY(QStringList groups READ groups NOTIFY groupsChanged)
0083     Q_PROPERTY(QStringList users READ users NOTIFY usersChanged)
0084 
0085 public:
0086     explicit FileProperties(QObject *parent = nullptr);
0087 
0088     const QUrl &url() const;
0089     void setUrl(const QUrl &newUrl);
0090 
0091     const QString &group() const;
0092     void setGroup(const QString &newGroup);
0093 
0094     const QStringList &groups() const;
0095 
0096     const QString &owner() const;
0097     void setOwner(const QString &newOwner);
0098 
0099     const QStringList &users() const;
0100 
0101 private:
0102     QUrl m_url;
0103 
0104     QString m_group;
0105 
0106     QStringList m_groups;
0107 
0108     QString m_owner;
0109     QStringList m_users;  ///< List of all usernames on the system
0110 
0111     void setData();
0112 
0113 Q_SIGNALS:
0114     void urlChanged();
0115     void groupChanged();
0116     void groupsChanged();
0117     void ownerChanged();
0118     void usersChanged();
0119 };
0120