#include "permission.h" PermissionManager& PermissionManager::getInstance() { static PermissionManager instance; return instance; } void PermissionManager::addRole(const Role& role) { m_roles[role.getName()] = role; const QVector& 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& 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& 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 PermissionManager::getAllPermissions() const { return m_allPermissions; }