23#include <fmt/ranges.h>
34 _id(id), _name(name), _perms()
45 _id(id), _name(name), _realmId(realmId), _secLevel(secLevel),
46 _grantedPerms(), _deniedPerms(), _globalPerms()
62 TC_LOG_TRACE(
"rbac",
"RBACData::GrantPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Permission does not exists",
70 TC_LOG_TRACE(
"rbac",
"RBACData::GrantPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Permission in deny list",
78 TC_LOG_TRACE(
"rbac",
"RBACData::GrantPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Permission already granted",
88 TC_LOG_TRACE(
"rbac",
"RBACData::GrantPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Ok and DB updated",
94 TC_LOG_TRACE(
"rbac",
"RBACData::GrantPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Ok",
106 TC_LOG_TRACE(
"rbac",
"RBACData::DenyPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Permission does not exists",
114 TC_LOG_TRACE(
"rbac",
"RBACData::DenyPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Permission in grant list",
122 TC_LOG_TRACE(
"rbac",
"RBACData::DenyPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Permission already denied",
132 TC_LOG_TRACE(
"rbac",
"RBACData::DenyPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Ok and DB updated",
138 TC_LOG_TRACE(
"rbac",
"RBACData::DenyPermission [Id: {} Name: {}] (Permission {}, RealmId {}). Ok",
159 TC_LOG_TRACE(
"rbac",
"RBACData::RevokePermission [Id: {} Name: {}] (Permission {}, RealmId {}). Not granted or revoked",
170 TC_LOG_TRACE(
"rbac",
"RBACData::RevokePermission [Id: {} Name: {}] (Permission {}, RealmId {}). Ok and DB updated",
181 TC_LOG_TRACE(
"rbac",
"RBACData::RevokePermission [Id: {} Name: {}] (Permission {}, RealmId {}). Ok",
219 Field* fields = result->Fetch();
220 if (fields[1].GetBool())
224 }
while (result->NextRow());
229 for (
uint32 permission : permissions)
250 for (
uint32 permission : permsFrom)
251 permsTo.insert(permission);
256 for (
uint32 permission: permsToRemove)
257 permsFrom.erase(permission);
265 while (!toCheck.empty())
268 uint32 permissionId = *toCheck.begin();
269 toCheck.erase(toCheck.begin());
276 permissions.insert(permissionId);
280 for (
uint32 linkedPerm : linkedPerms)
281 if (permissions.find(linkedPerm) == permissions.end())
282 toCheck.insert(linkedPerm);
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
#define TC_LOG_DEBUG(filterType__, message__,...)
#define TC_LOG_TRACE(filterType__, message__,...)
@ LOGIN_DEL_RBAC_ACCOUNT_PERMISSION
@ LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS
@ LOGIN_INS_RBAC_ACCOUNT_PERMISSION
Role Based Access Control related classes definition.
Class used to access individual fields of database query result.
void setUInt32(uint8 index, uint32 value)
void setBool(uint8 index, bool value)
void setInt32(uint8 index, int32 value)
RBACPermissionContainer const & GetDeniedPermissions() const
Returns all the denied permissions.
RBACCommandResult GrantPermission(uint32 permissionId, int32 realmId=0)
void AddDeniedPermission(uint32 permissionId)
Adds a new denied permission.
RBACPermissionContainer _grantedPerms
Account SecurityLevel
void AddGrantedPermission(uint32 permissionId)
Adds a new granted permission.
void ExpandPermissions(RBACPermissionContainer &permissions)
bool HasDeniedPermission(uint32 permissionId) const
Checks if a permission is denied.
uint32 GetId() const
Gets the Id of the Object.
void AddPermissions(RBACPermissionContainer const &permsFrom, RBACPermissionContainer &permsTo)
Adds a list of permissions to another list.
void SavePermission(uint32 role, bool granted, int32 realm)
Saves a permission to DB, Granted or Denied.
QueryCallback LoadFromDBAsync()
RBACData(uint32 id, std::string const &name, int32 realmId, uint8 secLevel=255)
void ClearData()
Clears roles, groups and permissions - Used for reload.
RBACPermissionContainer _globalPerms
Denied permissions
RBACPermissionContainer const & GetGrantedPermissions() const
Returns all the granted permissions.
RBACPermissionContainer _deniedPerms
Granted permissions
void CalculateNewPermissions()
RBACCommandResult DenyPermission(uint32 permissionId, int32 realmId=0)
bool HasGrantedPermission(uint32 permissionId) const
Checks if a permission is granted.
uint8 _secLevel
RealmId Affected
RBACData & operator=(RBACData const &right)
std::string const & GetName() const
Gets the Name of the Object.
void RemoveDeniedPermission(uint32 permissionId)
Removes a denied permission.
void RemoveGrantedPermission(uint32 permissionId)
Removes a granted permission.
RBACCommandResult RevokePermission(uint32 permissionId, int32 realmId=0)
void LoadFromDB()
Loads all permissions assigned to current account.
void RemovePermissions(RBACPermissionContainer &permsFrom, RBACPermissionContainer const &permsToRemove)
Removes a list of permissions from another list.
void LoadFromDBCallback(PreparedQueryResult result)
RBACPermissionContainer const & GetLinkedPermissions() const
Gets the Permissions linked to this permission.
RBACPermission(uint32 id=0, std::string const &name="")
RBACPermission & operator=(RBACPermission const &right)
std::string StringFormat(FormatString< Args... > fmt, Args &&... args) noexcept
Default TC string format function.
std::string GetDebugPermissionString(RBACPermissionContainer const &perms)
@ RBAC_CANT_ADD_ALREADY_ADDED
@ RBAC_ID_DOES_NOT_EXISTS
@ RBAC_CANT_REVOKE_NOT_IN_LIST
std::set< uint32 > RBACPermissionContainer