permission.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "permission.h"
  2. PermissionManager& PermissionManager::getInstance() {
  3. static PermissionManager instance;
  4. return instance;
  5. }
  6. void PermissionManager::addRole(const Role& role) {
  7. m_roles[role.getName()] = role;
  8. const QVector<QString>& permissions = role.getPermissions();
  9. for (const QString& permission : permissions) {
  10. m_allPermissions.insert(permission);
  11. }
  12. }
  13. void PermissionManager::removeRole(const QString& roleName) {
  14. if (m_roles.contains(roleName)) {
  15. const Role& role = m_roles[roleName];
  16. const QVector<QString>& permissions = role.getPermissions();
  17. // 检查是否有其他角色使用相同的权限
  18. for (const QString& permission : permissions) {
  19. bool permissionUsedByOthers = false;
  20. for (const Role& otherRole : m_roles) {
  21. if (otherRole.getName() != roleName && otherRole.hasPermission(permission)) {
  22. permissionUsedByOthers = true;
  23. break;
  24. }
  25. }
  26. if (!permissionUsedByOthers) {
  27. m_allPermissions.remove(permission);
  28. }
  29. }
  30. m_roles.remove(roleName);
  31. }
  32. }
  33. Role* PermissionManager::getRole(const QString& roleName) {
  34. if (m_roles.contains(roleName)) {
  35. return &m_roles[roleName];
  36. }
  37. return nullptr;
  38. }
  39. bool PermissionManager::checkPermission(const User& user, const QString& permission) const {
  40. const QVector<QString>& userRoles = user.getRoles();
  41. for (const QString& roleName : userRoles) {
  42. if (m_roles.contains(roleName)) {
  43. const Role& role = m_roles[roleName];
  44. if (role.hasPermission(permission)) {
  45. return true;
  46. }
  47. }
  48. }
  49. return false;
  50. }
  51. QSet<QString> PermissionManager::getAllPermissions() const {
  52. return m_allPermissions;
  53. }