aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2013-02-27 03:29:11 +0100
committerSpp <spp@jorge.gr>2013-02-27 03:30:53 +0100
commit480c6cf4dd8965627aa7bc6e903558f2fa5c3ea6 (patch)
tree23b29b1b9fb0d778aa1b63cd18e551c17f731086 /src/server/game/Server
parent4ea31ce8862cbc1bc4b9c35bc2ff677cbb6c4a16 (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.cpp20
-rw-r--r--src/server/game/Server/WorldSession.h1
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; }