RBACCommandResult RBACData::DenyRole(uint32 roleId, int32 realmId /* = 0*/) { // Check if role Id exists RBACRole const* role = sAccountMgr->GetRBACRole(roleId); if (!role) return RBAC_ID_DOES_NOT_EXISTS; // Check if already added in granted list if (_grantedRoles.find(roleId) != _grantedRoles.end()) return RBAC_IN_GRANTED_LIST; // Already added? std::pair<std::set<uint32>::iterator, bool> ret = _deniedRoles.insert(roleId); if (!ret.second) return RBAC_CANT_ADD_ALREADY_ADDED; // Do not save to db when loading data from DB (realmId = 0) if (realmId) { SaveRole(roleId, false, realmId); CalculateNewPermissions(); } return RBAC_OK; }
RBACCommandResult RBACData::DenyRole(uint32 roleId, int32 realmId /* = 0*/) { // Check if role Id exists RBACRole const* role = sAccountMgr->GetRBACRole(roleId); if (!role) { TC_LOG_TRACE(LOG_FILTER_RBAC, "RBACData::DenyRole [Id: %u Name: %s] (Role %u, RealmId %d). Role does not exists", GetId(), GetName().c_str(), roleId, realmId); return RBAC_ID_DOES_NOT_EXISTS; } // Check if already added in granted list if (_grantedRoles.find(roleId) != _grantedRoles.end()) { TC_LOG_TRACE(LOG_FILTER_RBAC, "RBACData::DenyRole [Id: %u Name: %s] (Role %u, RealmId %d). Role in grant list", GetId(), GetName().c_str(), roleId, realmId); return RBAC_IN_GRANTED_LIST; } // Already added? std::pair<std::set<uint32>::iterator, bool> ret = _deniedRoles.insert(roleId); if (!ret.second) { TC_LOG_TRACE(LOG_FILTER_RBAC, "RBACData::DenyRole [Id: %u Name: %s] (Role %u, RealmId %d). Role already denied", GetId(), GetName().c_str(), roleId, realmId); return RBAC_CANT_ADD_ALREADY_ADDED; } // Do not save to db when loading data from DB (realmId = 0) if (realmId) { TC_LOG_TRACE(LOG_FILTER_RBAC, "RBACData::DenyRole [Id: %u Name: %s] (Role %u, RealmId %d). Ok and DB updated", GetId(), GetName().c_str(), roleId, realmId); SaveRole(roleId, false, realmId); CalculateNewPermissions(); } else TC_LOG_TRACE(LOG_FILTER_RBAC, "RBACData::DenyRole [Id: %u Name: %s] (Role %u, RealmId %d). Ok", GetId(), GetName().c_str(), roleId, realmId); return RBAC_OK; }