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