aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp18
-rw-r--r--src/server/game/Accounts/AccountMgr.h4
-rw-r--r--src/server/game/Accounts/RBAC.cpp5
-rw-r--r--src/server/game/Accounts/RBAC.h2
-rw-r--r--src/server/worldserver/worldserver.conf.dist8
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 = ""
+
+#
###################################################################################################
###################################################################################################