diff options
| author | Spp <spp@jorge.gr> | 2013-02-27 03:29:11 +0100 |
|---|---|---|
| committer | Spp <spp@jorge.gr> | 2013-02-27 03:30:53 +0100 |
| commit | 480c6cf4dd8965627aa7bc6e903558f2fa5c3ea6 (patch) | |
| tree | 23b29b1b9fb0d778aa1b63cd18e551c17f731086 /src/server/game/Server | |
| parent | 4ea31ce8862cbc1bc4b9c35bc2ff677cbb6c4a16 (diff) | |
Core/RBAC: Add .reload rbac command and prevent possible crash if rbac_permissions has wrong data
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/WorldSession.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 1 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 8bf92d95248..8ebb85d8084 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1175,11 +1175,13 @@ void WorldSession::LoadPermissions() { uint32 id = GetAccountId(); std::string name; - int32 realmId = ConfigMgr::GetIntDefault("RealmID", 0); AccountMgr::GetName(id, name); - _RBACData = new RBACData(id, name, realmId); + _RBACData = new RBACData(id, name, realmID); _RBACData->LoadFromDB(); + + sLog->outDebug(LOG_FILTER_RBAC, "WorldSession::LoadPermissions [AccountId: %u, Name: %s, realmId: %d]", + id, name.c_str(), realmID); } RBACData* WorldSession::GetRBACData() @@ -1192,5 +1194,17 @@ bool WorldSession::HasPermission(uint32 permission) if (!_RBACData) LoadPermissions(); - return _RBACData->HasPermission(permission); + bool hasPermission = _RBACData->HasPermission(permission); + sLog->outDebug(LOG_FILTER_RBAC, "WorldSession::HasPermission [AccountId: %u, Name: %s, realmId: %d]", + _RBACData->GetId(), _RBACData->GetName().c_str(), realmID); + + return hasPermission; +} + +void WorldSession::InvalidateRBACData() +{ + sLog->outDebug(LOG_FILTER_RBAC, "WorldSession::InvalidateRBACData [AccountId: %u, Name: %s, realmId: %d]", + _RBACData->GetId(), _RBACData->GetName().c_str(), realmID); + delete _RBACData; + _RBACData = NULL; } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 20fa7d9335d..b714cd71e6d 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -220,6 +220,7 @@ class WorldSession RBACData* GetRBACData(); bool HasPermission(uint32 permissionId); void LoadPermissions(); + void InvalidateRBACData(); // Used to force LoadPermissions at next HasPermission check AccountTypes GetSecurity() const { return _security; } uint32 GetAccountId() const { return _accountId; } |
