From fc78c48495661dc1e8393c637028971c8126a680 Mon Sep 17 00:00:00 2001 From: Spp Date: Mon, 25 Feb 2013 13:40:56 +0100 Subject: Core/RBAC: Create new permissions 'Notify if a command was not found' and 'Enables lower security than target check' --- src/server/game/Accounts/RBAC.h | 48 +++++++++++++++++++++-------------------- src/server/game/Chat/Chat.cpp | 5 +++-- 2 files changed, 28 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index e8ea9a33134..8113f7cf1fb 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -48,29 +48,31 @@ enum RBACPermissions { - RBAC_PERM_INSTANT_LOGOUT = 1, - RBAC_PERM_SKIP_QUEUE = 2, - RBAC_PERM_JOIN_NORMAL_BG = 3, - RBAC_PERM_JOIN_RANDOM_BG = 4, - RBAC_PERM_JOIN_ARENAS = 5, - RBAC_PERM_JOIN_DUNGEON_FINDER = 6, - RBAC_PERM_PLAYER_COMMANDS = 7, - RBAC_PERM_MODERATOR_COMMANDS = 8, - RBAC_PERM_GAMEMASTER_COMMANDS = 9, - RBAC_PERM_ADMINISTRATOR_COMMANDS = 10, - RBAC_PERM_LOG_GM_TRADE = 11, - RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES = 13, - RBAC_PERM_SKIP_CHECK_OVERSPEED_PING = 23, - RBAC_PERM_TWO_SIDE_INTERACTION_MAIL = 27, - RBAC_PERM_COMMANDS_SAVE_WITHOUT_DELAY = 30, - RBAC_PERM_COMMANDS_USE_UNSTUCK_WITH_ARGS = 31, - RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET = 32, - RBAC_PERM_COMMANDS_APPEAR_IN_GM_LIST = 34, - RBAC_PERM_CHAT_USE_STAFF_BADGE = 37, - RBAC_PERM_RESURRECT_WITH_FULL_HPS = 38, - RBAC_PERM_OPCODE_WORLD_TELEPORT = 42, - RBAC_PERM_OPCODE_WHOIS = 43, - RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE = 44, + RBAC_PERM_INSTANT_LOGOUT = 1, + RBAC_PERM_SKIP_QUEUE = 2, + RBAC_PERM_JOIN_NORMAL_BG = 3, + RBAC_PERM_JOIN_RANDOM_BG = 4, + RBAC_PERM_JOIN_ARENAS = 5, + RBAC_PERM_JOIN_DUNGEON_FINDER = 6, + RBAC_PERM_PLAYER_COMMANDS = 7, + RBAC_PERM_MODERATOR_COMMANDS = 8, + RBAC_PERM_GAMEMASTER_COMMANDS = 9, + RBAC_PERM_ADMINISTRATOR_COMMANDS = 10, + RBAC_PERM_LOG_GM_TRADE = 11, + RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES = 13, + RBAC_PERM_SKIP_CHECK_OVERSPEED_PING = 23, + RBAC_PERM_TWO_SIDE_INTERACTION_MAIL = 27, + RBAC_PERM_COMMANDS_SAVE_WITHOUT_DELAY = 30, + RBAC_PERM_COMMANDS_USE_UNSTUCK_WITH_ARGS = 31, + RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET = 32, + RBAC_PERM_COMMANDS_NOTIFY_COMMAND_NOT_FOUND_ERROR = 33, + RBAC_PERM_COMMANDS_APPEAR_IN_GM_LIST = 34, + RBAC_PERM_CHAT_USE_STAFF_BADGE = 37, + RBAC_PERM_RESURRECT_WITH_FULL_HPS = 38, + RBAC_PERM_OPCODE_WORLD_TELEPORT = 42, + RBAC_PERM_OPCODE_WHOIS = 43, + RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE = 44, + RBAC_PERM_CHECK_FOR_LOWER_SECURITY = 47, RBAC_PERM_MAX }; diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 3cae9d0f83a..7c92af2d67f 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -175,7 +175,7 @@ bool ChatHandler::HasLowerSecurityAccount(WorldSession* target, uint32 target_ac return false; // ignore only for non-players for non strong checks (when allow apply command at least to same sec level) - if (!AccountMgr::IsPlayerAccount(m_session->GetSecurity()) && !strong && !sWorld->getBoolConfig(CONFIG_GM_LOWER_SECURITY)) + if (m_session->HasPermission(RBAC_PERM_CHECK_FOR_LOWER_SECURITY) && !strong && !sWorld->getBoolConfig(CONFIG_GM_LOWER_SECURITY)) return false; if (target) @@ -361,6 +361,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, co // table[i].Name == "" is special case: send original command to handler if ((table[i].Handler)(this, table[i].Name[0] != '\0' ? text : oldtext)) { + // FIXME: When Command system is moved to RBAC this check must be changed if (!AccountMgr::IsPlayerAccount(table[i].SecurityLevel)) { // chat case @@ -476,7 +477,7 @@ bool ChatHandler::ParseCommands(char const* text) if (!ExecuteCommandInTable(getCommandTable(), text, fullcmd)) { - if (m_session && AccountMgr::IsPlayerAccount(m_session->GetSecurity())) + if (m_session && !m_session->HasPermission(RBAC_PERM_COMMANDS_NOTIFY_COMMAND_NOT_FOUND_ERROR)) return false; SendSysMessage(LANG_NO_CMD); -- cgit v1.2.3