| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #include "permission.h"
- PermissionManager& PermissionManager::getInstance() {
- static PermissionManager instance;
- return instance;
- }
- void PermissionManager::addRole(const Role& role) {
- m_roles[role.getName()] = role;
- const QVector<QString>& permissions = role.getPermissions();
- for (const QString& permission : permissions) {
- m_allPermissions.insert(permission);
- }
- }
- void PermissionManager::removeRole(const QString& roleName) {
- if (m_roles.contains(roleName)) {
- const Role& role = m_roles[roleName];
- const QVector<QString>& permissions = role.getPermissions();
-
- // 检查是否有其他角色使用相同的权限
- for (const QString& permission : permissions) {
- bool permissionUsedByOthers = false;
- for (const Role& otherRole : m_roles) {
- if (otherRole.getName() != roleName && otherRole.hasPermission(permission)) {
- permissionUsedByOthers = true;
- break;
- }
- }
- if (!permissionUsedByOthers) {
- m_allPermissions.remove(permission);
- }
- }
-
- m_roles.remove(roleName);
- }
- }
- Role* PermissionManager::getRole(const QString& roleName) {
- if (m_roles.contains(roleName)) {
- return &m_roles[roleName];
- }
- return nullptr;
- }
- bool PermissionManager::checkPermission(const User& user, const QString& permission) const {
- const QVector<QString>& userRoles = user.getRoles();
- for (const QString& roleName : userRoles) {
- if (m_roles.contains(roleName)) {
- const Role& role = m_roles[roleName];
- if (role.hasPermission(permission)) {
- return true;
- }
- }
- }
- return false;
- }
- QSet<QString> PermissionManager::getAllPermissions() const {
- return m_allPermissions;
- }
|