diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Accounts/AccountMgr.cpp | 18 | ||||
-rw-r--r-- | src/server/game/Accounts/AccountMgr.h | 4 | ||||
-rw-r--r-- | src/server/game/Accounts/RBAC.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Accounts/RBAC.h | 2 | ||||
-rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 8 |
5 files changed, 31 insertions, 6 deletions
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 036cff1902d..bd560c8266e 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -56,7 +56,7 @@ AccountOpResult AccountMgr::CreateAccount(std::string username, std::string pass RBACData* rbac = new RBACData(GetId(username), username, -1); // No need to Load From DB, as it's new data - RBACGroupContainer const& groupsToAdd = _defaultGroups[0]; // 0: Default sec level + RBACGroupContainer const& groupsToAdd = _defaultSecGroups[0]; // 0: Default sec level for (RBACGroupContainer::const_iterator it = groupsToAdd.begin(); it != groupsToAdd.end(); ++it) rbac->AddGroup(*it, -1); @@ -426,13 +426,23 @@ void AccountMgr::LoadRBAC() uint8 secId = field[0].GetUInt8(); if (lastSecId != secId) - groups = &_defaultGroups[secId]; + groups = &_defaultSecGroups[secId]; groups->insert(field[1].GetUInt32()); } while (result->NextRow()); sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u permission definitions, %u role definitions and %u group definitions in %u ms", count1, count2, count3, GetMSTimeDiffToNow(oldMSTime)); + + // Load default groups to be added to any RBAC Object. + std::string defaultGroups = ConfigMgr::GetStringDefault("RBAC.DefaultGroups", ""); + Tokenizer tokens(defaultGroups, ','); + for (Tokenizer::const_iterator itr = tokens.begin(); itr != tokens.end(); ++itr) + if (uint32 groupId = atoi(*itr)) + { + sLog->outError(LOG_FILTER_LFG, "Adding default group %u", groupId); + _defaultGroups.insert(groupId); + } } void AccountMgr::UpdateAccountAccess(RBACData* rbac, uint32 accountId, uint8 securityLevel, int32 realmId) @@ -459,7 +469,7 @@ void AccountMgr::UpdateAccountAccess(RBACData* rbac, uint32 accountId, uint8 sec uint8 secLevel = field[0].GetUInt8(); int32 realmId = field[1].GetUInt32(); - RBACGroupContainer const& groupsToRemove = _defaultGroups[secLevel]; + RBACGroupContainer const& groupsToRemove = _defaultSecGroups[secLevel]; for (RBACGroupContainer::const_iterator it = groupsToRemove.begin(); it != groupsToRemove.end(); ++it) rbac->RemoveGroup(*it, realmId); } @@ -467,7 +477,7 @@ void AccountMgr::UpdateAccountAccess(RBACData* rbac, uint32 accountId, uint8 sec } // Add new groups depending on the new security Level - RBACGroupContainer const& groupsToAdd = _defaultGroups[securityLevel]; + RBACGroupContainer const& groupsToAdd = _defaultSecGroups[securityLevel]; for (RBACGroupContainer::const_iterator it = groupsToAdd.begin(); it != groupsToAdd.end(); ++it) rbac->AddGroup(*it, realmId); diff --git a/src/server/game/Accounts/AccountMgr.h b/src/server/game/Accounts/AccountMgr.h index 90c533ca5fa..440e012f1fc 100644 --- a/src/server/game/Accounts/AccountMgr.h +++ b/src/server/game/Accounts/AccountMgr.h @@ -77,12 +77,14 @@ class AccountMgr RBACGroupsContainer const& GetRBACGroupList() const { return _groups; } RBACRolesContainer const& GetRBACRoleList() const { return _roles; } RBACPermissionsContainer const& GetRBACPermissionList() const { return _permissions; } + RBACGroupContainer const& GetRBACDefaultGroups() const { return _defaultGroups; } private: RBACPermissionsContainer _permissions; RBACRolesContainer _roles; RBACGroupsContainer _groups; - RBACDefaultSecurityGroupContainer _defaultGroups; + RBACDefaultSecurityGroupContainer _defaultSecGroups; + RBACGroupContainer _defaultGroups; }; #define sAccountMgr ACE_Singleton<AccountMgr, ACE_Null_Mutex>::instance() diff --git a/src/server/game/Accounts/RBAC.cpp b/src/server/game/Accounts/RBAC.cpp index 4a069df05cd..121c9faae76 100644 --- a/src/server/game/Accounts/RBAC.cpp +++ b/src/server/game/Accounts/RBAC.cpp @@ -296,6 +296,11 @@ void RBACData::LoadFromDB() while (result->NextRow());
}
+ // Add default groups
+ RBACGroupContainer const& groups = sAccountMgr->GetRBACDefaultGroups();
+ for (RBACGroupContainer::const_iterator itr = groups.begin(); itr != groups.end(); ++itr)
+ AddGroup(*itr);
+
// Force calculation of permissions, it wasn't performed at load time
// while adding groups, roles and permissions
CalculateNewPermissions();
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index d2c76b71801..f6e494e7b70 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -135,7 +135,7 @@ class RBACGroup: public RBACObject RBACRoleContainer _roles; ///> Set of Roles
};
-/*
+/**
* @name RBACData
* @brief Contains all needed information about the acccount
*
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index dfc7e83f250..069c027d139 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1120,6 +1120,14 @@ DBC.EnforceItemAttributes = 1 AccountInstancesPerHour = 5 # +# RBAC.DefaultGroups +# Description: Comma separated list of groups to be added to any account +# Check auth.rbac_groups for correct ids +# Default: "" (No group) + +RBAC.DefaultGroups = "" + +# ################################################################################################### ################################################################################################### |