From 1eee42433b429db690d1fd90513e021d9431c49e Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 11:45:59 +0200 Subject: Core/RBAC: Move group commands to RBAC (using individual permissions) - group commands moved from cs_misc.cpp to own file - renamed groupsummon to "group summon" --- src/server/game/Accounts/RBAC.h | 14 +- src/server/game/Scripting/ScriptLoader.cpp | 2 + src/server/scripts/Commands/CMakeLists.txt | 104 +-------- src/server/scripts/Commands/cs_group.cpp | 338 +++++++++++++++++++++++++++++ src/server/scripts/Commands/cs_misc.cpp | 273 ----------------------- 5 files changed, 354 insertions(+), 377 deletions(-) create mode 100644 src/server/scripts/Commands/cs_group.cpp (limited to 'src') diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 492a7197cfe..e03daba50bd 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -177,11 +177,11 @@ enum RBACPermissions RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION = 275, RBAC_PERM_COMMAND_CHARACTER_CHANGERACE = 276, RBAC_PERM_COMMAND_CHARACTER_DELETED = 277, - RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE = 278, // Not in DB - console + RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE = 278, RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST = 279, RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE = 280, - RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD = 281, // Not in DB - console - RBAC_PERM_COMMAND_CHARACTER_ERASE = 282, // Not in DB - console + RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD = 281, + RBAC_PERM_COMMAND_CHARACTER_ERASE = 282, RBAC_PERM_COMMAND_CHARACTER_LEVEL = 283, RBAC_PERM_COMMAND_CHARACTER_RENAME = 284, RBAC_PERM_COMMAND_CHARACTER_REPUTATION = 285, @@ -299,6 +299,7 @@ enum RBACPermissions RBAC_PERM_COMMAND_GOBJECT_SET_STATE = 397, RBAC_PERM_COMMAND_GOBJECT_TARGET = 398, RBAC_PERM_COMMAND_GOBJECT_TURN = 399, + // 400 - reuse RBAC_PERM_COMMAND_GUILD = 401, RBAC_PERM_COMMAND_GUILD_CREATE = 402, RBAC_PERM_COMMAND_GUILD_DELETE = 403, @@ -370,6 +371,13 @@ enum RBACPermissions RBAC_PERM_COMMAND_NAMEANNOUNCE = 469, RBAC_PERM_COMMAND_NOTIFY = 470, RBAC_PERM_COMMAND_WHISPERS = 471, + RBAC_PERM_COMMAND_GROUP = 472, + RBAC_PERM_COMMAND_GROUP_LEADER = 473, + RBAC_PERM_COMMAND_GROUP_DISBAND = 474, + RBAC_PERM_COMMAND_GROUP_REMOVE = 475, + RBAC_PERM_COMMAND_GROUP_JOIN = 476, + RBAC_PERM_COMMAND_GROUP_LIST = 477, + RBAC_PERM_COMMAND_GROUP_SUMMON = 478, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 3456041ddb2..c3b2b2038a3 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -59,6 +59,7 @@ void AddSC_event_commandscript(); void AddSC_gm_commandscript(); void AddSC_go_commandscript(); void AddSC_gobject_commandscript(); +void AddSC_group_commandscript(); void AddSC_guild_commandscript(); void AddSC_honor_commandscript(); void AddSC_instance_commandscript(); @@ -740,6 +741,7 @@ void AddCommandScripts() AddSC_gm_commandscript(); AddSC_go_commandscript(); AddSC_gobject_commandscript(); + AddSC_group_commandscript(); AddSC_guild_commandscript(); AddSC_honor_commandscript(); AddSC_instance_commandscript(); diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index ce31fa1f4d3..c38789ed90a 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -8,109 +8,11 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +file(GLOB_RECURSE sources_Commands Commands/*.cpp Commands/*.h) + set(scripts_STAT_SRCS ${scripts_STAT_SRCS} - Commands/cs_account.cpp - Commands/cs_achievement.cpp - Commands/cs_arena.cpp - Commands/cs_ban.cpp - Commands/cs_bf.cpp - Commands/cs_cast.cpp - Commands/cs_character.cpp - Commands/cs_cheat.cpp - Commands/cs_debug.cpp - Commands/cs_deserter.cpp - Commands/cs_disable.cpp - Commands/cs_event.cpp - Commands/cs_gm.cpp - Commands/cs_go.cpp - Commands/cs_gobject.cpp - Commands/cs_guild.cpp - Commands/cs_honor.cpp - Commands/cs_instance.cpp - Commands/cs_learn.cpp - Commands/cs_lfg.cpp - Commands/cs_list.cpp - Commands/cs_lookup.cpp - Commands/cs_message.cpp - Commands/cs_misc.cpp - Commands/cs_modify.cpp - Commands/cs_npc.cpp - Commands/cs_quest.cpp - Commands/cs_rbac.cpp - Commands/cs_reload.cpp - Commands/cs_reset.cpp - Commands/cs_tele.cpp - Commands/cs_ticket.cpp - Commands/cs_server.cpp - Commands/cs_titles.cpp - Commands/cs_wp.cpp - Commands/cs_mmaps.cpp -# Commands/cs_pdump.cpp -# Commands/cs_channel.cpp -# Commands/cs_pet.cpp -# Commands/cs_aura.cpp -# Commands/cs_unaura.cpp -# Commands/cs_nameannounce.cpp -# Commands/cs_gmnameannounce.cpp -# Commands/cs_announce.cpp -# Commands/cs_gmannounce.cpp -# Commands/cs_notify.cpp -# Commands/cs_gmnotify.cpp -# Commands/cs_appear.cpp -# Commands/cs_summon.cpp -# Commands/cs_groupsummon.cpp -# Commands/cs_commands.cpp -# Commands/cs_demorph.cpp -# Commands/cs_die.cpp -# Commands/cs_revive.cpp -# Commands/cs_dismount.cpp -# Commands/cs_guid.cpp -# Commands/cs_help.cpp -# Commands/cs_itemmove.cpp -# Commands/cs_cooldown.cpp -# Commands/cs_unlearn.cpp -# Commands/cs_distance.cpp -# Commands/cs_recall.cpp -# Commands/cs_save.cpp -# Commands/cs_saveall.cpp -# Commands/cs_kick.cpp -# Commands/cs_start.cpp -# Commands/cs_taxicheat.cpp -# Commands/cs_linkgrave.cpp -# Commands/cs_neargrave.cpp -# Commands/cs_explorecheat.cpp -# Commands/cs_hover.cpp -# Commands/cs_levelup.cpp -# Commands/cs_showarea.cpp -# Commands/cs_hidearea.cpp -# Commands/cs_additem.cpp -# Commands/cs_additemset.cpp -# Commands/cs_bank.cpp -# Commands/cs_wchange.cpp -# Commands/cs_maxskill.cpp -# Commands/cs_setskill.cpp -# Commands/cs_whispers.cpp -# Commands/cs_pinfo.cpp -# Commands/cs_respawn.cpp -# Commands/cs_send.cpp -# Commands/cs_mute.cpp -# Commands/cs_unmute.cpp -# Commands/cs_movegens.cpp -# Commands/cs_cometome.cpp -# Commands/cs_damage.cpp -# Commands/cs_combatstop.cpp -# Commands/cs_flusharenapoints.cpp -# Commands/cs_repairitems.cpp -# Commands/cs_waterwalk.cpp -# Commands/cs_freeze.cpp -# Commands/cs_unfreeze.cpp -# Commands/cs_listfreeze.cpp -# Commands/cs_possess.cpp -# Commands/cs_unpossess.cpp -# Commands/cs_bindsight.cpp -# Commands/cs_unbindsight.cpp -# Commands/cs_playall.cpp + ${sources_Commands} ) message(" -> Prepared: Commands") diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp new file mode 100644 index 00000000000..784ff216c41 --- /dev/null +++ b/src/server/scripts/Commands/cs_group.cpp @@ -0,0 +1,338 @@ +/* + * Copyright (C) 2008-2013 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "Chat.h" +#include "Language.h" +#include "LFG.h" +#include "Player.h" +#include "ObjectMgr.h" +#include "GroupMgr.h" +#include "ScriptMgr.h" + +class group_commandscript : public CommandScript +{ +public: + group_commandscript() : CommandScript("group_commandscript") { } + + ChatCommand* GetCommands() const OVERRIDE + { + static ChatCommand groupCommandTable[] = + { + { "leader", RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "", NULL }, + { "disband", RBAC_PERM_COMMAND_GROUP_DISBAND, false, &HandleGroupDisbandCommand, "", NULL }, + { "remove", RBAC_PERM_COMMAND_GROUP_REMOVE, false, &HandleGroupRemoveCommand, "", NULL }, + { "join", RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "", NULL }, + { "list", RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "", NULL }, + { "summon", RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + + static ChatCommand commandTable[] = + { + { "group", RBAC_PERM_COMMAND_GROUP, false, NULL, "", groupCommandTable }, + { NULL, 0, false, NULL, "", NULL } + }; + return commandTable; + } + + // Summon group of player + static bool HandleGroupSummonCommand(ChatHandler* handler, char const* args) + { + Player* target; + if (!handler->extractPlayerTarget((char*)args, &target)) + return false; + + // check online security + if (handler->HasLowerSecurity(target, 0)) + return false; + + Group* group = target->GetGroup(); + + std::string nameLink = handler->GetNameLink(target); + + if (!group) + { + handler->PSendSysMessage(LANG_NOT_IN_GROUP, nameLink.c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + Player* gmPlayer = handler->GetSession()->GetPlayer(); + Group* gmGroup = gmPlayer->GetGroup(); + Map* gmMap = gmPlayer->GetMap(); + bool toInstance = gmMap->Instanceable(); + + // we are in instance, and can summon only player in our group with us as lead + if (toInstance && ( + !gmGroup || group->GetLeaderGUID() != gmPlayer->GetGUID() || + gmGroup->GetLeaderGUID() != gmPlayer->GetGUID())) + // the last check is a bit excessive, but let it be, just in case + { + handler->SendSysMessage(LANG_CANNOT_SUMMON_TO_INST); + handler->SetSentErrorMessage(true); + return false; + } + + for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) + { + Player* player = itr->GetSource(); + + if (!player || player == gmPlayer || !player->GetSession()) + continue; + + // check online security + if (handler->HasLowerSecurity(player, 0)) + return false; + + std::string plNameLink = handler->GetNameLink(player); + + if (player->IsBeingTeleported()) + { + handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + if (toInstance) + { + Map* playerMap = player->GetMap(); + + if (playerMap->Instanceable() && playerMap->GetInstanceId() != gmMap->GetInstanceId()) + { + // cannot summon from instance to instance + handler->PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST, plNameLink.c_str()); + handler->SetSentErrorMessage(true); + return false; + } + } + + handler->PSendSysMessage(LANG_SUMMONING, plNameLink.c_str(), ""); + if (handler->needReportToTarget(player)) + ChatHandler(player->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->GetNameLink().c_str()); + + // stop flight if need + if (player->IsInFlight()) + { + player->GetMotionMaster()->MovementExpired(); + player->CleanupAfterTaxiFlight(); + } + // save only in non-flight case + else + player->SaveRecallPosition(); + + // before GM + float x, y, z; + gmPlayer->GetClosePoint(x, y, z, player->GetObjectSize()); + player->TeleportTo(gmPlayer->GetMapId(), x, y, z, player->GetOrientation()); + } + + return true; + } + + static bool HandleGroupLeaderCommand(ChatHandler* handler, char const* args) + { + Player* player = NULL; + Group* group = NULL; + uint64 guid = 0; + char* nameStr = strtok((char*)args, " "); + + if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid)) + return false; + + if (!group) + { + handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + if (group->GetLeaderGUID() != guid) + { + group->ChangeLeader(guid); + group->SendUpdate(); + } + + return true; + } + + static bool HandleGroupDisbandCommand(ChatHandler* handler, char const* args) + { + Player* player = NULL; + Group* group = NULL; + uint64 guid = 0; + char* nameStr = strtok((char*)args, " "); + + if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid)) + return false; + + if (!group) + { + handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + group->Disband(); + return true; + } + + static bool HandleGroupRemoveCommand(ChatHandler* handler, char const* args) + { + Player* player = NULL; + Group* group = NULL; + uint64 guid = 0; + char* nameStr = strtok((char*)args, " "); + + if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid)) + return false; + + if (!group) + { + handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + group->RemoveMember(guid); + return true; + } + + static bool HandleGroupJoinCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + Player* playerSource = NULL; + Player* playerTarget = NULL; + Group* groupSource = NULL; + Group* groupTarget = NULL; + uint64 guidSource = 0; + uint64 guidTarget = 0; + char* nameplgrStr = strtok((char*)args, " "); + char* nameplStr = strtok(NULL, " "); + + if (!handler->GetPlayerGroupAndGUIDByName(nameplgrStr, playerSource, groupSource, guidSource, true)) + return false; + + if (!groupSource) + { + handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + if (!handler->GetPlayerGroupAndGUIDByName(nameplStr, playerTarget, groupTarget, guidTarget, true)) + return false; + + if (groupTarget || playerTarget->GetGroup() == groupSource) + { + handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + if (!groupSource->IsFull()) + { + handler->PSendSysMessage(LANG_GROUP_FULL); + handler->SetSentErrorMessage(true); + return false; + } + + groupSource->AddMember(playerTarget); + groupSource->BroadcastGroupUpdate(); + handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName().c_str(), playerSource->GetName().c_str()); + return true; + } + + static bool HandleGroupListCommand(ChatHandler* handler, char const* args) + { + Player* playerTarget; + uint64 guidTarget; + std::string nameTarget; + + uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER); + + if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) + { + playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID); + guidTarget = parseGUID; + } + else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget)) + return false; + + Group* groupTarget = NULL; + if (playerTarget) + groupTarget = playerTarget->GetGroup(); + + if (!groupTarget) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER); + stmt->setUInt32(0, guidTarget); + PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt); + if (resultGroup) + groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32()); + } + + if (!groupTarget) + { + handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party")); + Group::MemberSlotList const& members = groupTarget->GetMemberSlots(); + for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr) + { + Group::MemberSlot const& slot = *itr; + + std::string flags; + if (slot.flags & MEMBER_FLAG_ASSISTANT) + flags = "Assistant"; + + if (slot.flags & MEMBER_FLAG_MAINTANK) + { + if (!flags.empty()) + flags.append(", "); + flags.append("MainTank"); + } + + if (slot.flags & MEMBER_FLAG_MAINASSIST) + { + if (!flags.empty()) + flags.append(", "); + flags.append("MainAssist"); + } + + if (flags.empty()) + flags = "None"; + + Player* p = ObjectAccessor::FindPlayer((*itr).guid); + const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline"; + + handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, slot.name.c_str(), onlineState, + GUID_LOPART(slot.guid), flags.c_str(), lfg::GetRolesString(slot.roles).c_str()); + } + + return true; + } +}; + +void AddSC_group_commandscript() +{ + new group_commandscript(); +} diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 9c29e31af96..ce7c3e0f3a1 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -44,15 +44,6 @@ public: ChatCommand* GetCommands() const OVERRIDE { - static ChatCommand groupCommandTable[] = - { - { "leader", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupLeaderCommand, "", NULL }, - { "disband", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupDisbandCommand, "", NULL }, - { "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupRemoveCommand, "", NULL }, - { "join", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupJoinCommand, "", NULL }, - { "list", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupListCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } - }; static ChatCommand petCommandTable[] = { { "create", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleCreatePetCommand, "", NULL }, @@ -76,7 +67,6 @@ public: { "unaura", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleUnAuraCommand, "", NULL }, { "appear", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleAppearCommand, "", NULL }, { "summon", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleSummonCommand, "", NULL }, - { "groupsummon", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGroupSummonCommand, "", NULL }, { "commands", RBAC_PERM_PLAYER_COMMANDS, true, &HandleCommandsCommand, "", NULL }, { "die", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDieCommand, "", NULL }, { "revive", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReviveCommand, "", NULL }, @@ -116,7 +106,6 @@ public: { "freeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleFreezeCommand, "", NULL }, { "unfreeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleUnFreezeCommand, "", NULL }, { "listfreeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleListFreezeCommand, "", NULL }, - { "group", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", groupCommandTable }, { "possess", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandlePossessCommand, "", NULL }, { "unpossess", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleUnPossessCommand, "", NULL }, { "bindsight", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleBindSightCommand, "", NULL }, @@ -546,97 +535,6 @@ public: return true; } - // Summon group of player - static bool HandleGroupSummonCommand(ChatHandler* handler, char const* args) - { - Player* target; - if (!handler->extractPlayerTarget((char*)args, &target)) - return false; - - // check online security - if (handler->HasLowerSecurity(target, 0)) - return false; - - Group* group = target->GetGroup(); - - std::string nameLink = handler->GetNameLink(target); - - if (!group) - { - handler->PSendSysMessage(LANG_NOT_IN_GROUP, nameLink.c_str()); - handler->SetSentErrorMessage(true); - return false; - } - - Map* gmMap = handler->GetSession()->GetPlayer()->GetMap(); - bool toInstance = gmMap->Instanceable(); - - // we are in instance, and can summon only player in our group with us as lead - if (toInstance && ( - !handler->GetSession()->GetPlayer()->GetGroup() || (group->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()) || - (handler->GetSession()->GetPlayer()->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()))) - // the last check is a bit excessive, but let it be, just in case - { - handler->SendSysMessage(LANG_CANNOT_SUMMON_TO_INST); - handler->SetSentErrorMessage(true); - return false; - } - - for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) - { - Player* player = itr->GetSource(); - - if (!player || player == handler->GetSession()->GetPlayer() || !player->GetSession()) - continue; - - // check online security - if (handler->HasLowerSecurity(player, 0)) - return false; - - std::string plNameLink = handler->GetNameLink(player); - - if (player->IsBeingTeleported() == true) - { - handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str()); - handler->SetSentErrorMessage(true); - return false; - } - - if (toInstance) - { - Map* playerMap = player->GetMap(); - - if (playerMap->Instanceable() && playerMap->GetInstanceId() != gmMap->GetInstanceId()) - { - // cannot summon from instance to instance - handler->PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST, plNameLink.c_str()); - handler->SetSentErrorMessage(true); - return false; - } - } - - handler->PSendSysMessage(LANG_SUMMONING, plNameLink.c_str(), ""); - if (handler->needReportToTarget(player)) - ChatHandler(player->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->GetNameLink().c_str()); - - // stop flight if need - if (player->IsInFlight()) - { - player->GetMotionMaster()->MovementExpired(); - player->CleanupAfterTaxiFlight(); - } - // save only in non-flight case - else - player->SaveRecallPosition(); - - // before GM - float x, y, z; - handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, player->GetObjectSize()); - player->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, player->GetOrientation()); - } - - return true; - } static bool HandleCommandsCommand(ChatHandler* handler, char const* /*args*/) { @@ -2894,177 +2792,6 @@ public: return true; } - static bool HandleGroupLeaderCommand(ChatHandler* handler, char const* args) - { - Player* player = NULL; - Group* group = NULL; - uint64 guid = 0; - char* nameStr = strtok((char*)args, " "); - - if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid)) - if (group && group->GetLeaderGUID() != guid) - { - group->ChangeLeader(guid); - group->SendUpdate(); - } - - return true; - } - - static bool HandleGroupDisbandCommand(ChatHandler* handler, char const* args) - { - Player* player = NULL; - Group* group = NULL; - uint64 guid = 0; - char* nameStr = strtok((char*)args, " "); - - if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid)) - if (group) - group->Disband(); - - return true; - } - - static bool HandleGroupRemoveCommand(ChatHandler* handler, char const* args) - { - Player* player = NULL; - Group* group = NULL; - uint64 guid = 0; - char* nameStr = strtok((char*)args, " "); - - if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid, true)) - if (group) - group->RemoveMember(guid); - - return true; - } - - static bool HandleGroupJoinCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - Player* playerSource = NULL; - Player* playerTarget = NULL; - Group* groupSource = NULL; - Group* groupTarget = NULL; - uint64 guidSource = 0; - uint64 guidTarget = 0; - char* nameplgrStr = strtok((char*)args, " "); - char* nameplStr = strtok(NULL, " "); - - if (handler->GetPlayerGroupAndGUIDByName(nameplgrStr, playerSource, groupSource, guidSource, true)) - { - if (groupSource) - { - if (handler->GetPlayerGroupAndGUIDByName(nameplStr, playerTarget, groupTarget, guidTarget, true)) - { - if (!groupTarget && playerTarget->GetGroup() != groupSource) - { - if (!groupSource->IsFull()) - { - groupSource->AddMember(playerTarget); - groupSource->BroadcastGroupUpdate(); - handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName().c_str(), playerSource->GetName().c_str()); - return true; - } - else - { - // group is full - handler->PSendSysMessage(LANG_GROUP_FULL); - return true; - } - } - else - { - // group is full or target player already in a group - handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName().c_str()); - return true; - } - } - } - else - { - // specified source player is not in a group - handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName().c_str()); - return true; - } - } - - return true; - } - - static bool HandleGroupListCommand(ChatHandler* handler, char const* args) - { - Player* playerTarget; - uint64 guidTarget; - std::string nameTarget; - - uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER); - - if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) - { - playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID); - guidTarget = parseGUID; - } - else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget)) - return false; - - Group* groupTarget = NULL; - if (playerTarget) - groupTarget = playerTarget->GetGroup(); - - if (!groupTarget) - { - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER); - stmt->setUInt32(0, guidTarget); - PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt); - if (resultGroup) - groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32()); - } - - if (groupTarget) - { - handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party")); - Group::MemberSlotList const& members = groupTarget->GetMemberSlots(); - for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr) - { - Group::MemberSlot const& slot = *itr; - - std::string flags; - if (slot.flags & MEMBER_FLAG_ASSISTANT) - flags = "Assistant"; - - if (slot.flags & MEMBER_FLAG_MAINTANK) - { - if (!flags.empty()) - flags.append(", "); - flags.append("MainTank"); - } - - if (slot.flags & MEMBER_FLAG_MAINASSIST) - { - if (!flags.empty()) - flags.append(", "); - flags.append("MainAssist"); - } - - if (flags.empty()) - flags = "None"; - - Player* p = ObjectAccessor::FindPlayer((*itr).guid); - const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline"; - - handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, slot.name.c_str(), onlineState, - GUID_LOPART(slot.guid), flags.c_str(), lfg::GetRolesString(slot.roles).c_str()); - } - } - else - handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str()); - - return true; - } - static bool HandlePlayAllCommand(ChatHandler* handler, char const* args) { if (!*args) -- cgit v1.2.3 From 83cb44d79f9fb266d426b251a96dd7053da0187f Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 12:07:03 +0200 Subject: Core/RBAC: Move pet commands to RBAC (using individual permissions) - Pet commands moved from cs_misc.cpp to own file --- sql/updates/auth/2013_09_10_01_auth_misc.sql | 19 +++ sql/updates/world/2013_09_10_02_world_command.sql | 9 + src/server/game/Accounts/RBAC.h | 4 + src/server/game/Scripting/ScriptLoader.cpp | 2 + src/server/scripts/Commands/cs_misc.cpp | 147 ----------------- src/server/scripts/Commands/cs_pet.cpp | 190 ++++++++++++++++++++++ 6 files changed, 224 insertions(+), 147 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_01_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_02_world_command.sql create mode 100644 src/server/scripts/Commands/cs_pet.cpp (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_01_auth_misc.sql b/sql/updates/auth/2013_09_10_01_auth_misc.sql new file mode 100644 index 00000000000..92d68874b4b --- /dev/null +++ b/sql/updates/auth/2013_09_10_01_auth_misc.sql @@ -0,0 +1,19 @@ +/* cs_pet.cpp */ + +SET @id = 472; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+3; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0 , 'pet'), +(@id+1 , 'pet create'), +(@id+2 , 'pet learn'), +(@id+3 , 'pet unlearn'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+3; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(2, @id+0), +(2, @id+1), +(2, @id+2), +(2, @id+3); diff --git a/sql/updates/world/2013_09_10_02_world_command.sql b/sql/updates/world/2013_09_10_02_world_command.sql new file mode 100644 index 00000000000..b3eaff43691 --- /dev/null +++ b/sql/updates/world/2013_09_10_02_world_command.sql @@ -0,0 +1,9 @@ +/* cs_pet.cpp */ + +SET @id = 479; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'pet'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'pet create'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'pet learn'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'pet unlearn'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index e03daba50bd..f42c985100e 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -378,6 +378,10 @@ enum RBACPermissions RBAC_PERM_COMMAND_GROUP_JOIN = 476, RBAC_PERM_COMMAND_GROUP_LIST = 477, RBAC_PERM_COMMAND_GROUP_SUMMON = 478, + RBAC_PERM_COMMAND_PET = 479, + RBAC_PERM_COMMAND_PET_CREATE = 480, + RBAC_PERM_COMMAND_PET_LEARN = 481, + RBAC_PERM_COMMAND_PET_UNLEARN = 482, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index c3b2b2038a3..8d7c807c9f2 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -72,6 +72,7 @@ void AddSC_misc_commandscript(); void AddSC_mmaps_commandscript(); void AddSC_modify_commandscript(); void AddSC_npc_commandscript(); +void AddSC_pet_commandscript(); void AddSC_quest_commandscript(); void AddSC_rbac_commandscript(); void AddSC_reload_commandscript(); @@ -755,6 +756,7 @@ void AddCommandScripts() AddSC_modify_commandscript(); AddSC_npc_commandscript(); AddSC_quest_commandscript(); + AddSC_pet_commandscript(); AddSC_rbac_commandscript(); AddSC_reload_commandscript(); AddSC_reset_commandscript(); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index ce7c3e0f3a1..87fa24a4c35 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -44,13 +44,6 @@ public: ChatCommand* GetCommands() const OVERRIDE { - static ChatCommand petCommandTable[] = - { - { "create", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleCreatePetCommand, "", NULL }, - { "learn", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandlePetLearnCommand, "", NULL }, - { "unlearn", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandlePetUnlearnCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } - }; static ChatCommand sendCommandTable[] = { { "items", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendItemsCommand, "", NULL }, @@ -94,7 +87,6 @@ public: { "pinfo", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandlePInfoCommand, "", NULL }, { "respawn", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleRespawnCommand, "", NULL }, { "send", RBAC_PERM_MODERATOR_COMMANDS, true, NULL, "", sendCommandTable }, - { "pet", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", petCommandTable }, { "mute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleMuteCommand, "", NULL }, { "unmute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleUnmuteCommand, "", NULL }, { "movegens", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMovegensCommand, "", NULL }, @@ -2491,145 +2483,6 @@ public: return true; } - static bool HandleCreatePetCommand(ChatHandler* handler, char const* /*args*/) - { - Player* player = handler->GetSession()->GetPlayer(); - Creature* creatureTarget = handler->getSelectedCreature(); - - if (!creatureTarget || creatureTarget->IsPet() || creatureTarget->GetTypeId() == TYPEID_PLAYER) - { - handler->PSendSysMessage(LANG_SELECT_CREATURE); - handler->SetSentErrorMessage(true); - return false; - } - - CreatureTemplate const* creatrueTemplate = sObjectMgr->GetCreatureTemplate(creatureTarget->GetEntry()); - // Creatures with family 0 crashes the server - if (!creatrueTemplate->family) - { - handler->PSendSysMessage("This creature cannot be tamed. (family id: 0)."); - handler->SetSentErrorMessage(true); - return false; - } - - if (player->GetPetGUID()) - { - handler->PSendSysMessage("You already have a pet"); - handler->SetSentErrorMessage(true); - return false; - } - - // Everything looks OK, create new pet - Pet* pet = new Pet(player, HUNTER_PET); - if (!pet->CreateBaseAtCreature(creatureTarget)) - { - delete pet; - handler->PSendSysMessage("Error 1"); - return false; - } - - creatureTarget->setDeathState(JUST_DIED); - creatureTarget->RemoveCorpse(); - creatureTarget->SetHealth(0); // just for nice GM-mode view - - pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID()); - pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction()); - - if (!pet->InitStatsForLevel(creatureTarget->getLevel())) - { - TC_LOG_ERROR(LOG_FILTER_GENERAL, "InitStatsForLevel() in EffectTameCreature failed! Pet deleted."); - handler->PSendSysMessage("Error 2"); - delete pet; - return false; - } - - // prepare visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1); - - pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true); - // this enables pet details window (Shift+P) - pet->InitPetCreateSpells(); - pet->SetFullHealth(); - - pet->GetMap()->AddToMap(pet->ToCreature()); - - // visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()); - - player->SetMinion(pet, true); - pet->SavePetToDB(PET_SAVE_AS_CURRENT); - player->PetSpellInitialize(); - - return true; - } - - static bool HandlePetLearnCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - Player* player = handler->GetSession()->GetPlayer(); - Pet* pet = player->GetPet(); - - if (!pet) - { - handler->PSendSysMessage("You have no pet"); - handler->SetSentErrorMessage(true); - return false; - } - - uint32 spellId = handler->extractSpellIdFromLink((char*)args); - - if (!spellId || !sSpellMgr->GetSpellInfo(spellId)) - return false; - - // Check if pet already has it - if (pet->HasSpell(spellId)) - { - handler->PSendSysMessage("Pet already has spell: %u", spellId); - handler->SetSentErrorMessage(true); - return false; - } - - // Check if spell is valid - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo)) - { - handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId); - handler->SetSentErrorMessage(true); - return false; - } - - pet->learnSpell(spellId); - - handler->PSendSysMessage("Pet has learned spell %u", spellId); - return true; - } - - static bool HandlePetUnlearnCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - Player* player = handler->GetSession()->GetPlayer(); - Pet* pet = player->GetPet(); - if (!pet) - { - handler->PSendSysMessage("You have no pet"); - handler->SetSentErrorMessage(true); - return false; - } - - uint32 spellId = handler->extractSpellIdFromLink((char*)args); - - if (pet->HasSpell(spellId)) - pet->removeSpell(spellId, false); - else - handler->PSendSysMessage("Pet doesn't have that spell"); - - return true; - } - static bool HandleFreezeCommand(ChatHandler* handler, char const* args) { std::string name; diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp new file mode 100644 index 00000000000..237b25634c1 --- /dev/null +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2008-2013 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "Chat.h" +#include "Language.h" +#include "Pet.h" +#include "Player.h" +#include "ObjectMgr.h" +#include "ScriptMgr.h" + +class pet_commandscript : public CommandScript +{ +public: + pet_commandscript() : CommandScript("pet_commandscript") { } + + ChatCommand* GetCommands() const OVERRIDE + { + static ChatCommand petCommandTable[] = + { + { "create", RBAC_PERM_COMMAND_PET_CREATE, false, &HandlePetCreateCommand, "", NULL }, + { "learn", RBAC_PERM_COMMAND_PET_LEARN, false, &HandlePetLearnCommand, "", NULL }, + { "unlearn", RBAC_PERM_COMMAND_PET_UNLEARN, false, &HandlePetUnlearnCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + + static ChatCommand commandTable[] = + { + { "pet", RBAC_PERM_COMMAND_PET, false, NULL, "", petCommandTable }, + { NULL, 0, false, NULL, "", NULL } + }; + return commandTable; + } + static bool HandlePetCreateCommand(ChatHandler* handler, char const* /*args*/) + { + Player* player = handler->GetSession()->GetPlayer(); + Creature* creatureTarget = handler->getSelectedCreature(); + + if (!creatureTarget || creatureTarget->IsPet() || creatureTarget->GetTypeId() == TYPEID_PLAYER) + { + handler->PSendSysMessage(LANG_SELECT_CREATURE); + handler->SetSentErrorMessage(true); + return false; + } + + CreatureTemplate const* creatrueTemplate = sObjectMgr->GetCreatureTemplate(creatureTarget->GetEntry()); + // Creatures with family 0 crashes the server + if (!creatrueTemplate->family) + { + handler->PSendSysMessage("This creature cannot be tamed. (family id: 0)."); + handler->SetSentErrorMessage(true); + return false; + } + + if (player->GetPetGUID()) + { + handler->PSendSysMessage("You already have a pet"); + handler->SetSentErrorMessage(true); + return false; + } + + // Everything looks OK, create new pet + Pet* pet = new Pet(player, HUNTER_PET); + if (!pet->CreateBaseAtCreature(creatureTarget)) + { + delete pet; + handler->PSendSysMessage("Error 1"); + return false; + } + + creatureTarget->setDeathState(JUST_DIED); + creatureTarget->RemoveCorpse(); + creatureTarget->SetHealth(0); // just for nice GM-mode view + + pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID()); + pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction()); + + if (!pet->InitStatsForLevel(creatureTarget->getLevel())) + { + TC_LOG_ERROR(LOG_FILTER_GENERAL, "InitStatsForLevel() in EffectTameCreature failed! Pet deleted."); + handler->PSendSysMessage("Error 2"); + delete pet; + return false; + } + + // prepare visual effect for levelup + pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1); + + pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true); + // this enables pet details window (Shift+P) + pet->InitPetCreateSpells(); + pet->SetFullHealth(); + + pet->GetMap()->AddToMap(pet->ToCreature()); + + // visual effect for levelup + pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()); + + player->SetMinion(pet, true); + pet->SavePetToDB(PET_SAVE_AS_CURRENT); + player->PetSpellInitialize(); + + return true; + } + + static bool HandlePetLearnCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + Player* player = handler->GetSession()->GetPlayer(); + Pet* pet = player->GetPet(); + + if (!pet) + { + handler->PSendSysMessage("You have no pet"); + handler->SetSentErrorMessage(true); + return false; + } + + uint32 spellId = handler->extractSpellIdFromLink((char*)args); + + if (!spellId || !sSpellMgr->GetSpellInfo(spellId)) + return false; + + // Check if pet already has it + if (pet->HasSpell(spellId)) + { + handler->PSendSysMessage("Pet already has spell: %u", spellId); + handler->SetSentErrorMessage(true); + return false; + } + + // Check if spell is valid + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); + if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo)) + { + handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId); + handler->SetSentErrorMessage(true); + return false; + } + + pet->learnSpell(spellId); + + handler->PSendSysMessage("Pet has learned spell %u", spellId); + return true; + } + + static bool HandlePetUnlearnCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + Player* player = handler->GetSession()->GetPlayer(); + Pet* pet = player->GetPet(); + if (!pet) + { + handler->PSendSysMessage("You have no pet"); + handler->SetSentErrorMessage(true); + return false; + } + + uint32 spellId = handler->extractSpellIdFromLink((char*)args); + + if (pet->HasSpell(spellId)) + pet->removeSpell(spellId, false); + else + handler->PSendSysMessage("Pet doesn't have that spell"); + + return true; + } +}; + +void AddSC_pet_commandscript() +{ + new pet_commandscript(); +} -- cgit v1.2.3 From ec1e88d888a7a2ef16b814e505fba24be47a93e5 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 12:16:28 +0200 Subject: Core/RBAC: Move send commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_01_auth_misc.sql | 10 +- sql/updates/auth/2013_09_10_02_auth_misc.sql | 21 ++ sql/updates/world/2013_09_10_04_world_command.sql | 10 + src/server/game/Accounts/RBAC.h | 5 + src/server/game/Scripting/ScriptLoader.cpp | 2 + src/server/scripts/Commands/cs_misc.cpp | 244 ------------------ src/server/scripts/Commands/cs_send.cpp | 289 ++++++++++++++++++++++ 7 files changed, 332 insertions(+), 249 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_02_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_04_world_command.sql create mode 100644 src/server/scripts/Commands/cs_send.cpp (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_01_auth_misc.sql b/sql/updates/auth/2013_09_10_01_auth_misc.sql index 92d68874b4b..2dbfbcaaf46 100644 --- a/sql/updates/auth/2013_09_10_01_auth_misc.sql +++ b/sql/updates/auth/2013_09_10_01_auth_misc.sql @@ -1,6 +1,6 @@ /* cs_pet.cpp */ -SET @id = 472; +SET @id = 479; -- Add new permissions DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+3; @@ -13,7 +13,7 @@ INSERT INTO `rbac_permissions` (`id`, `name`) VALUES -- Add permissions to "corresponding Commands Role" DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+3; INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES -(2, @id+0), -(2, @id+1), -(2, @id+2), -(2, @id+3); +(3, @id+0), +(3, @id+1), +(3, @id+2), +(3, @id+3); diff --git a/sql/updates/auth/2013_09_10_02_auth_misc.sql b/sql/updates/auth/2013_09_10_02_auth_misc.sql new file mode 100644 index 00000000000..2049cda2ffc --- /dev/null +++ b/sql/updates/auth/2013_09_10_02_auth_misc.sql @@ -0,0 +1,21 @@ +/* cs_send.cpp */ + +SET @id = 483; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+4; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0 , 'send'), +(@id+1 , 'send items'), +(@id+2 , 'send mail'), +(@id+3 , 'send message'), +(@id+4 , 'send money'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+4; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(2, @id+0), +(2, @id+1), +(3, @id+2), +(3, @id+3), +(3, @id+4); diff --git a/sql/updates/world/2013_09_10_04_world_command.sql b/sql/updates/world/2013_09_10_04_world_command.sql new file mode 100644 index 00000000000..a49c65fe9e5 --- /dev/null +++ b/sql/updates/world/2013_09_10_04_world_command.sql @@ -0,0 +1,10 @@ +/* cs_send.cpp */ + +SET @id = 483; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'send'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'send items'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'send mail'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'send message'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'send money'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index f42c985100e..57b47565f5d 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -382,6 +382,11 @@ enum RBACPermissions RBAC_PERM_COMMAND_PET_CREATE = 480, RBAC_PERM_COMMAND_PET_LEARN = 481, RBAC_PERM_COMMAND_PET_UNLEARN = 482, + RBAC_PERM_COMMAND_SEND = 483, + RBAC_PERM_COMMAND_SEND_ITEMS = 484, + RBAC_PERM_COMMAND_SEND_MAIL = 485, + RBAC_PERM_COMMAND_SEND_MESSAGE = 486, + RBAC_PERM_COMMAND_SEND_MONEY = 487, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 8d7c807c9f2..31323a66ba9 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -77,6 +77,7 @@ void AddSC_quest_commandscript(); void AddSC_rbac_commandscript(); void AddSC_reload_commandscript(); void AddSC_reset_commandscript(); +void AddSC_send_commandscript(); void AddSC_server_commandscript(); void AddSC_tele_commandscript(); void AddSC_ticket_commandscript(); @@ -760,6 +761,7 @@ void AddCommandScripts() AddSC_rbac_commandscript(); AddSC_reload_commandscript(); AddSC_reset_commandscript(); + AddSC_send_commandscript(); AddSC_server_commandscript(); AddSC_tele_commandscript(); AddSC_ticket_commandscript(); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 87fa24a4c35..24d9aefcda7 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -44,14 +44,6 @@ public: ChatCommand* GetCommands() const OVERRIDE { - static ChatCommand sendCommandTable[] = - { - { "items", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendItemsCommand, "", NULL }, - { "mail", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleSendMailCommand, "", NULL }, - { "message", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendMessageCommand, "", NULL }, - { "money", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendMoneyCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } - }; static ChatCommand commandTable[] = { { "dev", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDevCommand, "", NULL }, @@ -86,7 +78,6 @@ public: { "setskill", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleSetSkillCommand, "", NULL }, { "pinfo", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandlePInfoCommand, "", NULL }, { "respawn", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleRespawnCommand, "", NULL }, - { "send", RBAC_PERM_MODERATOR_COMMANDS, true, NULL, "", sendCommandTable }, { "mute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleMuteCommand, "", NULL }, { "unmute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleUnmuteCommand, "", NULL }, { "movegens", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMovegensCommand, "", NULL }, @@ -2248,241 +2239,6 @@ public: return true; } - // Send mail by command - static bool HandleSendMailCommand(ChatHandler* handler, char const* args) - { - // format: name "subject text" "mail text" - Player* target; - uint64 targetGuid; - std::string targetName; - if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName)) - return false; - - char* tail1 = strtok(NULL, ""); - if (!tail1) - return false; - - char const* msgSubject = handler->extractQuotedArg(tail1); - if (!msgSubject) - return false; - - char* tail2 = strtok(NULL, ""); - if (!tail2) - return false; - - char const* msgText = handler->extractQuotedArg(tail2); - if (!msgText) - return false; - - // msgSubject, msgText isn't NUL after prev. check - std::string subject = msgSubject; - std::string text = msgText; - - // from console show not existed sender - MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); - - /// @todo Fix poor design - SQLTransaction trans = CharacterDatabase.BeginTransaction(); - MailDraft(subject, text) - .SendMailTo(trans, MailReceiver(target, GUID_LOPART(targetGuid)), sender); - - CharacterDatabase.CommitTransaction(trans); - - std::string nameLink = handler->playerLink(targetName); - handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); - return true; - } - // Send items by mail - static bool HandleSendItemsCommand(ChatHandler* handler, char const* args) - { - // format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12] - Player* receiver; - uint64 receiverGuid; - std::string receiverName; - if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName)) - return false; - - char* tail1 = strtok(NULL, ""); - if (!tail1) - return false; - - char const* msgSubject = handler->extractQuotedArg(tail1); - if (!msgSubject) - return false; - - char* tail2 = strtok(NULL, ""); - if (!tail2) - return false; - - char const* msgText = handler->extractQuotedArg(tail2); - if (!msgText) - return false; - - // msgSubject, msgText isn't NUL after prev. check - std::string subject = msgSubject; - std::string text = msgText; - - // extract items - typedef std::pair ItemPair; - typedef std::list< ItemPair > ItemPairs; - ItemPairs items; - - // get all tail string - char* tail = strtok(NULL, ""); - - // get from tail next item str - while (char* itemStr = strtok(tail, " ")) - { - // and get new tail - tail = strtok(NULL, ""); - - // parse item str - char const* itemIdStr = strtok(itemStr, ":"); - char const* itemCountStr = strtok(NULL, " "); - - uint32 itemId = atoi(itemIdStr); - if (!itemId) - return false; - - ItemTemplate const* item_proto = sObjectMgr->GetItemTemplate(itemId); - if (!item_proto) - { - handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId); - handler->SetSentErrorMessage(true); - return false; - } - - uint32 itemCount = itemCountStr ? atoi(itemCountStr) : 1; - if (itemCount < 1 || (item_proto->MaxCount > 0 && itemCount > uint32(item_proto->MaxCount))) - { - handler->PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, itemCount, itemId); - handler->SetSentErrorMessage(true); - return false; - } - - while (itemCount > item_proto->GetMaxStackSize()) - { - items.push_back(ItemPair(itemId, item_proto->GetMaxStackSize())); - itemCount -= item_proto->GetMaxStackSize(); - } - - items.push_back(ItemPair(itemId, itemCount)); - - if (items.size() > MAX_MAIL_ITEMS) - { - handler->PSendSysMessage(LANG_COMMAND_MAIL_ITEMS_LIMIT, MAX_MAIL_ITEMS); - handler->SetSentErrorMessage(true); - return false; - } - } - - // from console show not existed sender - MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); - - // fill mail - MailDraft draft(subject, text); - - SQLTransaction trans = CharacterDatabase.BeginTransaction(); - - for (ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr) - { - if (Item* item = Item::CreateItem(itr->first, itr->second, handler->GetSession() ? handler->GetSession()->GetPlayer() : 0)) - { - item->SaveToDB(trans); // save for prevent lost at next mail load, if send fail then item will deleted - draft.AddItem(item); - } - } - - draft.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender); - CharacterDatabase.CommitTransaction(trans); - - std::string nameLink = handler->playerLink(receiverName); - handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); - return true; - } - /// Send money by mail - static bool HandleSendMoneyCommand(ChatHandler* handler, char const* args) - { - /// format: name "subject text" "mail text" money - - Player* receiver; - uint64 receiverGuid; - std::string receiverName; - if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName)) - return false; - - char* tail1 = strtok(NULL, ""); - if (!tail1) - return false; - - char* msgSubject = handler->extractQuotedArg(tail1); - if (!msgSubject) - return false; - - char* tail2 = strtok(NULL, ""); - if (!tail2) - return false; - - char* msgText = handler->extractQuotedArg(tail2); - if (!msgText) - return false; - - char* moneyStr = strtok(NULL, ""); - int32 money = moneyStr ? atoi(moneyStr) : 0; - if (money <= 0) - return false; - - // msgSubject, msgText isn't NUL after prev. check - std::string subject = msgSubject; - std::string text = msgText; - - // from console show not existed sender - MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); - - SQLTransaction trans = CharacterDatabase.BeginTransaction(); - - MailDraft(subject, text) - .AddMoney(money) - .SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender); - - CharacterDatabase.CommitTransaction(trans); - - std::string nameLink = handler->playerLink(receiverName); - handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); - return true; - } - /// Send a message to a player in game - static bool HandleSendMessageCommand(ChatHandler* handler, char const* args) - { - /// - Find the player - Player* player; - if (!handler->extractPlayerTarget((char*)args, &player)) - return false; - - char* msgStr = strtok(NULL, ""); - if (!msgStr) - return false; - - ///- Check that he is not logging out. - if (player->GetSession()->isLogingOut()) - { - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - handler->SetSentErrorMessage(true); - return false; - } - - /// - Send the message - // Use SendAreaTriggerMessage for fastest delivery. - player->GetSession()->SendAreaTriggerMessage("%s", msgStr); - player->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r"); - - // Confirmation message - std::string nameLink = handler->GetNameLink(player); - handler->PSendSysMessage(LANG_SENDMESSAGE, nameLink.c_str(), msgStr); - - return true; - } - static bool HandleFreezeCommand(ChatHandler* handler, char const* args) { std::string name; diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp new file mode 100644 index 00000000000..5d50113249a --- /dev/null +++ b/src/server/scripts/Commands/cs_send.cpp @@ -0,0 +1,289 @@ +/* + * Copyright (C) 2008-2013 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "Chat.h" +#include "Language.h" +#include "Pet.h" +#include "Player.h" +#include "ObjectMgr.h" +#include "ScriptMgr.h" + +class send_commandscript : public CommandScript +{ +public: + send_commandscript() : CommandScript("send_commandscript") { } + + ChatCommand* GetCommands() const OVERRIDE + { + static ChatCommand sendCommandTable[] = + { + { "items", RBAC_PERM_COMMAND_SEND_ITEMS, true, &HandleSendItemsCommand, "", NULL }, + { "mail", RBAC_PERM_COMMAND_SEND_MAIL, true, &HandleSendMailCommand, "", NULL }, + { "message", RBAC_PERM_COMMAND_SEND_MESSAGE, true, &HandleSendMessageCommand, "", NULL }, + { "money", RBAC_PERM_COMMAND_SEND_MONEY, true, &HandleSendMoneyCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + + static ChatCommand commandTable[] = + { + { "send", RBAC_PERM_COMMAND_SEND, false, NULL, "", sendCommandTable }, + { NULL, 0, false, NULL, "", NULL } + }; + return commandTable; + } + + // Send mail by command + static bool HandleSendMailCommand(ChatHandler* handler, char const* args) + { + // format: name "subject text" "mail text" + Player* target; + uint64 targetGuid; + std::string targetName; + if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName)) + return false; + + char* tail1 = strtok(NULL, ""); + if (!tail1) + return false; + + char const* msgSubject = handler->extractQuotedArg(tail1); + if (!msgSubject) + return false; + + char* tail2 = strtok(NULL, ""); + if (!tail2) + return false; + + char const* msgText = handler->extractQuotedArg(tail2); + if (!msgText) + return false; + + // msgSubject, msgText isn't NUL after prev. check + std::string subject = msgSubject; + std::string text = msgText; + + // from console show not existed sender + MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); + + /// @todo Fix poor design + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + MailDraft(subject, text) + .SendMailTo(trans, MailReceiver(target, GUID_LOPART(targetGuid)), sender); + + CharacterDatabase.CommitTransaction(trans); + + std::string nameLink = handler->playerLink(targetName); + handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); + return true; + } + + // Send items by mail + static bool HandleSendItemsCommand(ChatHandler* handler, char const* args) + { + // format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12] + Player* receiver; + uint64 receiverGuid; + std::string receiverName; + if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName)) + return false; + + char* tail1 = strtok(NULL, ""); + if (!tail1) + return false; + + char const* msgSubject = handler->extractQuotedArg(tail1); + if (!msgSubject) + return false; + + char* tail2 = strtok(NULL, ""); + if (!tail2) + return false; + + char const* msgText = handler->extractQuotedArg(tail2); + if (!msgText) + return false; + + // msgSubject, msgText isn't NUL after prev. check + std::string subject = msgSubject; + std::string text = msgText; + + // extract items + typedef std::pair ItemPair; + typedef std::list< ItemPair > ItemPairs; + ItemPairs items; + + // get all tail string + char* tail = strtok(NULL, ""); + + // get from tail next item str + while (char* itemStr = strtok(tail, " ")) + { + // and get new tail + tail = strtok(NULL, ""); + + // parse item str + char const* itemIdStr = strtok(itemStr, ":"); + char const* itemCountStr = strtok(NULL, " "); + + uint32 itemId = atoi(itemIdStr); + if (!itemId) + return false; + + ItemTemplate const* item_proto = sObjectMgr->GetItemTemplate(itemId); + if (!item_proto) + { + handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId); + handler->SetSentErrorMessage(true); + return false; + } + + uint32 itemCount = itemCountStr ? atoi(itemCountStr) : 1; + if (itemCount < 1 || (item_proto->MaxCount > 0 && itemCount > uint32(item_proto->MaxCount))) + { + handler->PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, itemCount, itemId); + handler->SetSentErrorMessage(true); + return false; + } + + while (itemCount > item_proto->GetMaxStackSize()) + { + items.push_back(ItemPair(itemId, item_proto->GetMaxStackSize())); + itemCount -= item_proto->GetMaxStackSize(); + } + + items.push_back(ItemPair(itemId, itemCount)); + + if (items.size() > MAX_MAIL_ITEMS) + { + handler->PSendSysMessage(LANG_COMMAND_MAIL_ITEMS_LIMIT, MAX_MAIL_ITEMS); + handler->SetSentErrorMessage(true); + return false; + } + } + + // from console show not existed sender + MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); + + // fill mail + MailDraft draft(subject, text); + + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + for (ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr) + { + if (Item* item = Item::CreateItem(itr->first, itr->second, handler->GetSession() ? handler->GetSession()->GetPlayer() : 0)) + { + item->SaveToDB(trans); // save for prevent lost at next mail load, if send fail then item will deleted + draft.AddItem(item); + } + } + + draft.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender); + CharacterDatabase.CommitTransaction(trans); + + std::string nameLink = handler->playerLink(receiverName); + handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); + return true; + } + /// Send money by mail + static bool HandleSendMoneyCommand(ChatHandler* handler, char const* args) + { + /// format: name "subject text" "mail text" money + + Player* receiver; + uint64 receiverGuid; + std::string receiverName; + if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName)) + return false; + + char* tail1 = strtok(NULL, ""); + if (!tail1) + return false; + + char* msgSubject = handler->extractQuotedArg(tail1); + if (!msgSubject) + return false; + + char* tail2 = strtok(NULL, ""); + if (!tail2) + return false; + + char* msgText = handler->extractQuotedArg(tail2); + if (!msgText) + return false; + + char* moneyStr = strtok(NULL, ""); + int32 money = moneyStr ? atoi(moneyStr) : 0; + if (money <= 0) + return false; + + // msgSubject, msgText isn't NUL after prev. check + std::string subject = msgSubject; + std::string text = msgText; + + // from console show not existed sender + MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); + + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + MailDraft(subject, text) + .AddMoney(money) + .SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender); + + CharacterDatabase.CommitTransaction(trans); + + std::string nameLink = handler->playerLink(receiverName); + handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); + return true; + } + /// Send a message to a player in game + static bool HandleSendMessageCommand(ChatHandler* handler, char const* args) + { + /// - Find the player + Player* player; + if (!handler->extractPlayerTarget((char*)args, &player)) + return false; + + char* msgStr = strtok(NULL, ""); + if (!msgStr) + return false; + + ///- Check that he is not logging out. + if (player->GetSession()->isLogingOut()) + { + handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); + handler->SetSentErrorMessage(true); + return false; + } + + /// - Send the message + // Use SendAreaTriggerMessage for fastest delivery. + player->GetSession()->SendAreaTriggerMessage("%s", msgStr); + player->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r"); + + // Confirmation message + std::string nameLink = handler->GetNameLink(player); + handler->PSendSysMessage(LANG_SENDMESSAGE, nameLink.c_str(), msgStr); + + return true; + } +}; + +void AddSC_send_commandscript() +{ + new send_commandscript(); +} -- cgit v1.2.3 From 10384462782fe9d198eb5e94fbc8437f7b5727d1 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 12:59:25 +0200 Subject: Core/RBAC: Move misc commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_03_auth_misc.sql | 107 ++++++++++++++++++++++ sql/updates/world/2013_09_10_05_world_command.sql | 53 +++++++++++ src/server/game/Accounts/RBAC.h | 48 ++++++++++ src/server/scripts/Commands/cs_misc.cpp | 98 ++++++++++---------- src/server/scripts/Commands/cs_rbac.cpp | 4 +- 5 files changed, 259 insertions(+), 51 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_03_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_05_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_03_auth_misc.sql b/sql/updates/auth/2013_09_10_03_auth_misc.sql new file mode 100644 index 00000000000..553830f6ecb --- /dev/null +++ b/sql/updates/auth/2013_09_10_03_auth_misc.sql @@ -0,0 +1,107 @@ +/* cs_misc.cpp */ + +SET @id = 488; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+47; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'additem'), +(@id+1, 'additemset'), +(@id+2, 'appear'), +(@id+3, 'aura'), +(@id+4, 'bank'), +(@id+5, 'bindsight'), +(@id+6, 'combatstop'), +(@id+7, 'cometome'), +(@id+8, 'commands'), +(@id+9, 'cooldown'), +(@id+10, 'damage'), +(@id+11, 'dev'), +(@id+12, 'die'), +(@id+13, 'dismount'), +(@id+14, 'distance'), +(@id+15, 'flusharenapoints'), +(@id+16, 'freeze'), +(@id+17, 'gps'), +(@id+18, 'guid'), +(@id+19, 'help'), +(@id+20, 'hidearea'), +(@id+21, 'itemmove'), +(@id+22, 'kick'), +(@id+23, 'linkgrave'), +(@id+24, 'listfreeze'), +(@id+25, 'maxskill'), +(@id+26, 'movegens'), +(@id+27, 'mute'), +(@id+28, 'neargrave'), +(@id+29, 'pinfo'), +(@id+30, 'playall'), +(@id+31, 'possess'), +(@id+32, 'recall'), +(@id+33, 'repairitems'), +(@id+34, 'respawn'), +(@id+35, 'revive'), +(@id+36, 'saveall'), +(@id+37, 'save'), +(@id+38, 'setskill'), +(@id+39, 'showarea'), +(@id+40, 'summon'), +(@id+41, 'unaura'), +(@id+42, 'unbindsight'), +(@id+43, 'unfreeze'), +(@id+44, 'unmute'), +(@id+45, 'unpossess'), +(@id+46, 'unstuck'), +(@id+47, 'wchange'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+47; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(4, @id+0), +(4, @id+1), +(2, @id+2), +(4, @id+3), +(4, @id+4), +(4, @id+5), +(3, @id+6), +(4, @id+7), +(1, @id+8), +(4, @id+9), +(4, @id+10), +(4, @id+11), +(4, @id+12), +(1, @id+13), +(4, @id+14), +(4, @id+15), +(2, @id+16), +(4, @id+17), +(3, @id+18), +(1, @id+19), +(4, @id+20), +(3, @id+21), +(3, @id+22), +(4, @id+23), +(2, @id+24), +(4, @id+25), +(4, @id+26), +(2, @id+27), +(4, @id+28), +(3, @id+29), +(3, @id+30), +(4, @id+31), +(2, @id+32), +(3, @id+33), +(4, @id+34), +(4, @id+35), +(2, @id+36), +(1, @id+37), +(4, @id+38), +(4, @id+39), +(2, @id+40), +(4, @id+41), +(4, @id+42), +(2, @id+43), +(2, @id+44), +(4, @id+45), +(1, @id+46), +(4, @id+47); diff --git a/sql/updates/world/2013_09_10_05_world_command.sql b/sql/updates/world/2013_09_10_05_world_command.sql new file mode 100644 index 00000000000..3cb64e7c02d --- /dev/null +++ b/sql/updates/world/2013_09_10_05_world_command.sql @@ -0,0 +1,53 @@ +/* cs_misc.cpp */ + +SET @id = 488; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'additem'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'additemset'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'appear'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'aura'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'bank'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'bindsight'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'combatstop'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'cometome'; +UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'commands'; +UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'cooldown'; +UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'damage'; +UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'dev'; +UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'die'; +UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'dismount'; +UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'distance'; +UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'flusharenapoints'; +UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'freeze'; +UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'gps'; +UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'guid'; +UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'help'; +UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'hidearea'; +UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'itemmove'; +UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'kick'; +UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'linkgrave'; +UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'listfreeze'; +UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'maxskill'; +UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'movegens'; +UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'mute'; +UPDATE `command` SET `permission` = @id+28 WHERE `name` = 'neargrave'; +UPDATE `command` SET `permission` = @id+29 WHERE `name` = 'pinfo'; +UPDATE `command` SET `permission` = @id+30 WHERE `name` = 'playall'; +UPDATE `command` SET `permission` = @id+31 WHERE `name` = 'possess'; +UPDATE `command` SET `permission` = @id+32 WHERE `name` = 'recall'; +UPDATE `command` SET `permission` = @id+33 WHERE `name` = 'repairitems'; +UPDATE `command` SET `permission` = @id+34 WHERE `name` = 'respawn'; +UPDATE `command` SET `permission` = @id+35 WHERE `name` = 'revive'; +UPDATE `command` SET `permission` = @id+36 WHERE `name` = 'saveall'; +UPDATE `command` SET `permission` = @id+37 WHERE `name` = 'save'; +UPDATE `command` SET `permission` = @id+38 WHERE `name` = 'setskill'; +UPDATE `command` SET `permission` = @id+39 WHERE `name` = 'showarea'; +UPDATE `command` SET `permission` = @id+40 WHERE `name` = 'summon'; +UPDATE `command` SET `permission` = @id+41 WHERE `name` = 'unaura'; +UPDATE `command` SET `permission` = @id+42 WHERE `name` = 'unbindsight'; +UPDATE `command` SET `permission` = @id+43 WHERE `name` = 'unfreeze'; +UPDATE `command` SET `permission` = @id+44 WHERE `name` = 'unmute'; +UPDATE `command` SET `permission` = @id+45 WHERE `name` = 'unpossess'; +UPDATE `command` SET `permission` = @id+46 WHERE `name` = 'unstuck'; +UPDATE `command` SET `permission` = @id+47 WHERE `name` = 'wchange'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 57b47565f5d..a758062ee8a 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -387,6 +387,54 @@ enum RBACPermissions RBAC_PERM_COMMAND_SEND_MAIL = 485, RBAC_PERM_COMMAND_SEND_MESSAGE = 486, RBAC_PERM_COMMAND_SEND_MONEY = 487, + RBAC_PERM_COMMAND_ADDITEM = 488, + RBAC_PERM_COMMAND_ADDITEMSET = 489, + RBAC_PERM_COMMAND_APPEAR = 490, + RBAC_PERM_COMMAND_AURA = 491, + RBAC_PERM_COMMAND_BANK = 492, + RBAC_PERM_COMMAND_BINDSIGHT = 493, + RBAC_PERM_COMMAND_COMBATSTOP = 494, + RBAC_PERM_COMMAND_COMETOME = 495, + RBAC_PERM_COMMAND_COMMANDS = 496, + RBAC_PERM_COMMAND_COOLDOWN = 497, + RBAC_PERM_COMMAND_DAMAGE = 498, + RBAC_PERM_COMMAND_DEV = 499, + RBAC_PERM_COMMAND_DIE = 500, + RBAC_PERM_COMMAND_DISMOUNT = 501, + RBAC_PERM_COMMAND_DISTANCE = 502, + RBAC_PERM_COMMAND_FLUSHARENAPOINTS = 503, + RBAC_PERM_COMMAND_FREEZE = 504, + RBAC_PERM_COMMAND_GPS = 505, + RBAC_PERM_COMMAND_GUID = 506, + RBAC_PERM_COMMAND_HELP = 507, + RBAC_PERM_COMMAND_HIDEAREA = 508, + RBAC_PERM_COMMAND_ITEMMOVE = 509, + RBAC_PERM_COMMAND_KICK = 510, + RBAC_PERM_COMMAND_LINKGRAVE = 511, + RBAC_PERM_COMMAND_LISTFREEZE = 512, + RBAC_PERM_COMMAND_MAXSKILL = 513, + RBAC_PERM_COMMAND_MOVEGENS = 514, + RBAC_PERM_COMMAND_MUTE = 515, + RBAC_PERM_COMMAND_NEARGRAVE = 516, + RBAC_PERM_COMMAND_PINFO = 517, + RBAC_PERM_COMMAND_PLAYALL = 518, + RBAC_PERM_COMMAND_POSSESS = 519, + RBAC_PERM_COMMAND_RECALL = 520, + RBAC_PERM_COMMAND_REPAIRITEMS = 521, + RBAC_PERM_COMMAND_RESPAWN = 522, + RBAC_PERM_COMMAND_REVIVE = 523, + RBAC_PERM_COMMAND_SAVE = 524, + RBAC_PERM_COMMAND_SAVEALL = 525, + RBAC_PERM_COMMAND_SETSKILL = 526, + RBAC_PERM_COMMAND_SHOWAREA = 527, + RBAC_PERM_COMMAND_SUMMON = 528, + RBAC_PERM_COMMAND_UNAURA = 529, + RBAC_PERM_COMMAND_UNBINDSIGHT = 530, + RBAC_PERM_COMMAND_UNFREEZE = 531, + RBAC_PERM_COMMAND_UNMUTE = 532, + RBAC_PERM_COMMAND_UNPOSSESS = 533, + RBAC_PERM_COMMAND_UNSTUCK = 534, + RBAC_PERM_COMMAND_WCHANGE = 535, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 24d9aefcda7..96244c19036 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -46,55 +46,55 @@ public: { static ChatCommand commandTable[] = { - { "dev", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDevCommand, "", NULL }, - { "gps", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGPSCommand, "", NULL }, - { "aura", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAuraCommand, "", NULL }, - { "unaura", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleUnAuraCommand, "", NULL }, - { "appear", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleAppearCommand, "", NULL }, - { "summon", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleSummonCommand, "", NULL }, - { "commands", RBAC_PERM_PLAYER_COMMANDS, true, &HandleCommandsCommand, "", NULL }, - { "die", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDieCommand, "", NULL }, - { "revive", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReviveCommand, "", NULL }, - { "dismount", RBAC_PERM_PLAYER_COMMANDS, false, &HandleDismountCommand, "", NULL }, - { "guid", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGUIDCommand, "", NULL }, - { "help", RBAC_PERM_PLAYER_COMMANDS, true, &HandleHelpCommand, "", NULL }, - { "itemmove", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleItemMoveCommand, "", NULL }, - { "cooldown", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCooldownCommand, "", NULL }, - { "distance", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGetDistanceCommand, "", NULL }, - { "recall", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleRecallCommand, "", NULL }, - { "save", RBAC_PERM_PLAYER_COMMANDS, false, &HandleSaveCommand, "", NULL }, - { "saveall", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleSaveAllCommand, "", NULL }, - { "kick", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleKickPlayerCommand, "", NULL }, - { "unstuck", RBAC_PERM_PLAYER_COMMANDS, true, &HandleUnstuckCommand, "", NULL }, - { "linkgrave", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLinkGraveCommand, "", NULL }, - { "neargrave", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNearGraveCommand, "", NULL }, - { "showarea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleShowAreaCommand, "", NULL }, - { "hidearea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleHideAreaCommand, "", NULL }, - { "additem", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAddItemCommand, "", NULL }, - { "additemset", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAddItemSetCommand, "", NULL }, - { "bank", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleBankCommand, "", NULL }, - { "wchange", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleChangeWeather, "", NULL }, - { "maxskill", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMaxSkillCommand, "", NULL }, - { "setskill", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleSetSkillCommand, "", NULL }, - { "pinfo", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandlePInfoCommand, "", NULL }, - { "respawn", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleRespawnCommand, "", NULL }, - { "mute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleMuteCommand, "", NULL }, - { "unmute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleUnmuteCommand, "", NULL }, - { "movegens", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMovegensCommand, "", NULL }, - { "cometome", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleComeToMeCommand, "", NULL }, - { "damage", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDamageCommand, "", NULL }, - { "combatstop", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCombatStopCommand, "", NULL }, - { "flusharenapoints", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleFlushArenaPointsCommand, "", NULL }, - { "repairitems", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleRepairitemsCommand, "", NULL }, - { "freeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleFreezeCommand, "", NULL }, - { "unfreeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleUnFreezeCommand, "", NULL }, - { "listfreeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleListFreezeCommand, "", NULL }, - { "possess", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandlePossessCommand, "", NULL }, - { "unpossess", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleUnPossessCommand, "", NULL }, - { "bindsight", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleBindSightCommand, "", NULL }, - { "unbindsight", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleUnbindSightCommand, "", NULL }, - { "playall", RBAC_PERM_GAMEMASTER_COMMANDS, false, HandlePlayAllCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "additem", RBAC_PERM_COMMAND_ADDITEM, false, &HandleAddItemCommand, "", NULL }, + { "additemset", RBAC_PERM_COMMAND_ADDITEMSET, false, &HandleAddItemSetCommand, "", NULL }, + { "appear", RBAC_PERM_COMMAND_APPEAR, false, &HandleAppearCommand, "", NULL }, + { "aura", RBAC_PERM_COMMAND_AURA, false, &HandleAuraCommand, "", NULL }, + { "bank", RBAC_PERM_COMMAND_BANK, false, &HandleBankCommand, "", NULL }, + { "bindsight", RBAC_PERM_COMMAND_BINDSIGHT, false, &HandleBindSightCommand, "", NULL }, + { "combatstop", RBAC_PERM_COMMAND_COMBATSTOP, true, &HandleCombatStopCommand, "", NULL }, + { "cometome", RBAC_PERM_COMMAND_COMETOME, false, &HandleComeToMeCommand, "", NULL }, + { "commands", RBAC_PERM_COMMAND_COMMANDS, true, &HandleCommandsCommand, "", NULL }, + { "cooldown", RBAC_PERM_COMMAND_COOLDOWN, false, &HandleCooldownCommand, "", NULL }, + { "damage", RBAC_PERM_COMMAND_DAMAGE, false, &HandleDamageCommand, "", NULL }, + { "dev", RBAC_PERM_COMMAND_DEV, false, &HandleDevCommand, "", NULL }, + { "die", RBAC_PERM_COMMAND_DIE, false, &HandleDieCommand, "", NULL }, + { "dismount", RBAC_PERM_COMMAND_DISMOUNT, false, &HandleDismountCommand, "", NULL }, + { "distance", RBAC_PERM_COMMAND_DISTANCE, false, &HandleGetDistanceCommand, "", NULL }, + { "flusharenapoints", RBAC_PERM_COMMAND_FLUSHARENAPOINTS, false, &HandleFlushArenaPointsCommand, "", NULL }, + { "freeze", RBAC_PERM_COMMAND_FREEZE, false, &HandleFreezeCommand, "", NULL }, + { "gps", RBAC_PERM_COMMAND_GPS, false, &HandleGPSCommand, "", NULL }, + { "guid", RBAC_PERM_COMMAND_GUID, false, &HandleGUIDCommand, "", NULL }, + { "help", RBAC_PERM_COMMAND_HELP, true, &HandleHelpCommand, "", NULL }, + { "hidearea", RBAC_PERM_COMMAND_HIDEAREA, false, &HandleHideAreaCommand, "", NULL }, + { "itemmove", RBAC_PERM_COMMAND_ITEMMOVE, false, &HandleItemMoveCommand, "", NULL }, + { "kick", RBAC_PERM_COMMAND_KICK, true, &HandleKickPlayerCommand, "", NULL }, + { "linkgrave", RBAC_PERM_COMMAND_LINKGRAVE, false, &HandleLinkGraveCommand, "", NULL }, + { "listfreeze", RBAC_PERM_COMMAND_LISTFREEZE, false, &HandleListFreezeCommand, "", NULL }, + { "maxskill", RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "", NULL }, + { "movegens", RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "", NULL }, + { "mute", RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "", NULL }, + { "neargrave", RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "", NULL }, + { "pinfo", RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "", NULL }, + { "playall", RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "", NULL }, + { "possess", RBAC_PERM_COMMAND_POSSESS, false, &HandlePossessCommand, "", NULL }, + { "recall", RBAC_PERM_COMMAND_RECALL, false, &HandleRecallCommand, "", NULL }, + { "repairitems", RBAC_PERM_COMMAND_REPAIRITEMS, true, &HandleRepairitemsCommand, "", NULL }, + { "respawn", RBAC_PERM_COMMAND_RESPAWN, false, &HandleRespawnCommand, "", NULL }, + { "revive", RBAC_PERM_COMMAND_REVIVE, true, &HandleReviveCommand, "", NULL }, + { "saveall", RBAC_PERM_COMMAND_SAVEALL, true, &HandleSaveAllCommand, "", NULL }, + { "save", RBAC_PERM_COMMAND_SAVE, false, &HandleSaveCommand, "", NULL }, + { "setskill", RBAC_PERM_COMMAND_SETSKILL, false, &HandleSetSkillCommand, "", NULL }, + { "showarea", RBAC_PERM_COMMAND_SHOWAREA, false, &HandleShowAreaCommand, "", NULL }, + { "summon", RBAC_PERM_COMMAND_SUMMON, false, &HandleSummonCommand, "", NULL }, + { "unaura", RBAC_PERM_COMMAND_UNAURA, false, &HandleUnAuraCommand, "", NULL }, + { "unbindsight", RBAC_PERM_COMMAND_UNBINDSIGHT, false, HandleUnbindSightCommand, "", NULL }, + { "unfreeze", RBAC_PERM_COMMAND_UNFREEZE, false, &HandleUnFreezeCommand, "", NULL }, + { "unmute", RBAC_PERM_COMMAND_UNMUTE, true, &HandleUnmuteCommand, "", NULL }, + { "unpossess", RBAC_PERM_COMMAND_UNPOSSESS, false, &HandleUnPossessCommand, "", NULL }, + { "unstuck", RBAC_PERM_COMMAND_UNSTUCK, true, &HandleUnstuckCommand, "", NULL }, + { "wchange", RBAC_PERM_COMMAND_WCHANGE, false, &HandleChangeWeather, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_rbac.cpp b/src/server/scripts/Commands/cs_rbac.cpp index 9c682acb224..ba899fee077 100644 --- a/src/server/scripts/Commands/cs_rbac.cpp +++ b/src/server/scripts/Commands/cs_rbac.cpp @@ -64,7 +64,7 @@ public: { "grant", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_GRANT, true, &HandleRBACRoleGrantCommand, "", NULL }, { "deny", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_DENY, true, &HandleRBACRoleDenyCommand, "", NULL }, { "revoke", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_REVOKE, true, &HandleRBACRoleRevokeCommand, "", NULL }, - { "", RBAC_PERM_COMMAND_RBAC_ACC_ROLE, true, &HandleRBACRoleListCommand, "", NULL }, + { "", RBAC_PERM_COMMAND_RBAC_ACC_ROLE, true, &HandleRBACRoleListCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; @@ -73,7 +73,7 @@ public: { "grant", RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT, true, &HandleRBACPermGrantCommand, "", NULL }, { "deny", RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY, true, &HandleRBACPermDenyCommand, "", NULL }, { "revoke", RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE, true, &HandleRBACPermRevokeCommand, "", NULL }, - { "", RBAC_PERM_COMMAND_RBAC_ACC_PERM, true, &HandleRBACPermListCommand, "", NULL }, + { "", RBAC_PERM_COMMAND_RBAC_ACC_PERM, true, &HandleRBACPermListCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; -- cgit v1.2.3 From 4d36ce7405d6cc5e29d1fe10b0ffd35d91722d93 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 13:08:39 +0200 Subject: Core/RBAC: Move mmap commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_04_auth_misc.sql | 23 +++++++++++++++++++++++ sql/updates/world/2013_09_10_06_world_command.sql | 11 +++++++++++ src/server/game/Accounts/RBAC.h | 6 ++++++ src/server/scripts/Commands/cs_mmaps.cpp | 16 ++++++++-------- 4 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_04_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_06_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_04_auth_misc.sql b/sql/updates/auth/2013_09_10_04_auth_misc.sql new file mode 100644 index 00000000000..9b1f48f2914 --- /dev/null +++ b/sql/updates/auth/2013_09_10_04_auth_misc.sql @@ -0,0 +1,23 @@ +/* cs_mmaps.cpp */ + +SET @id = 536; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+5; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'mmap'), +(@id+1, 'mmap loadedtiles'), +(@id+2, 'mmap loc'), +(@id+3, 'mmap path'), +(@id+4, 'mmap stats'), +(@id+5, 'mmap testarea'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+5; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(4, @id+0), +(4, @id+1), +(4, @id+2), +(4, @id+3), +(4, @id+4), +(4, @id+5); diff --git a/sql/updates/world/2013_09_10_06_world_command.sql b/sql/updates/world/2013_09_10_06_world_command.sql new file mode 100644 index 00000000000..57aba9eadaa --- /dev/null +++ b/sql/updates/world/2013_09_10_06_world_command.sql @@ -0,0 +1,11 @@ +/* cs_mmaps.cpp */ + +SET @id = 536; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'mmap'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'mmap loadedtiles'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'mmap loc'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'mmap path'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'mmap stats'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'mmap testarea'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index a758062ee8a..926b2769842 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -435,6 +435,12 @@ enum RBACPermissions RBAC_PERM_COMMAND_UNPOSSESS = 533, RBAC_PERM_COMMAND_UNSTUCK = 534, RBAC_PERM_COMMAND_WCHANGE = 535, + RBAC_PERM_COMMAND_MMAP = 536, + RBAC_PERM_COMMAND_MMAP_LOADEDTILES = 537, + RBAC_PERM_COMMAND_MMAP_LOC = 538, + RBAC_PERM_COMMAND_MMAP_PATH = 539, + RBAC_PERM_COMMAND_MMAP_STATS = 540, + RBAC_PERM_COMMAND_MMAP_TESTAREA = 541, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index 6667499af58..caefcceb886 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -45,18 +45,18 @@ public: { static ChatCommand mmapCommandTable[] = { - { "path", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapPathCommand, "", NULL }, - { "loc", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapLocCommand, "", NULL }, - { "loadedtiles", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapLoadedTilesCommand, "", NULL }, - { "stats", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapStatsCommand, "", NULL }, - { "testarea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapTestArea, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "loadedtiles", RBAC_PERM_COMMAND_MMAP_LOADEDTILES, false, &HandleMmapLoadedTilesCommand, "", NULL }, + { "loc", RBAC_PERM_COMMAND_MMAP_LOC, false, &HandleMmapLocCommand, "", NULL }, + { "path", RBAC_PERM_COMMAND_MMAP_PATH, false, &HandleMmapPathCommand, "", NULL }, + { "stats", RBAC_PERM_COMMAND_MMAP_STATS, false, &HandleMmapStatsCommand, "", NULL }, + { "testarea", RBAC_PERM_COMMAND_MMAP_TESTAREA, false, &HandleMmapTestArea, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "mmap", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", mmapCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "mmap", RBAC_PERM_COMMAND_MMAP, true, NULL, "", mmapCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From 04b313557ed3fbeec17530bc581459a6226e3da5 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 13:28:32 +0200 Subject: Core/RBAC: Move modify commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_05_auth_misc.sql | 68 +++++++++++++++++++++++ sql/updates/world/2013_09_10_07_world_command.sql | 33 +++++++++++ src/server/game/Accounts/RBAC.h | 28 ++++++++++ src/server/scripts/Commands/cs_modify.cpp | 64 ++++++++++----------- 4 files changed, 161 insertions(+), 32 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_05_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_07_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_05_auth_misc.sql b/sql/updates/auth/2013_09_10_05_auth_misc.sql new file mode 100644 index 00000000000..607821854d3 --- /dev/null +++ b/sql/updates/auth/2013_09_10_05_auth_misc.sql @@ -0,0 +1,68 @@ +/* cs_modify.cpp */ + +SET @id = 542; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+27; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'morph'), +(@id+1, 'demorph'), +(@id+2, 'modify'), +(@id+3, 'modify arenapoints'), +(@id+4, 'modify bit'), +(@id+5, 'modify drunk'), +(@id+6, 'modify energy'), +(@id+7, 'modify faction'), +(@id+8, 'modify gender'), +(@id+9, 'modify honor'), +(@id+10, 'modify hp'), +(@id+11, 'modify mana'), +(@id+12, 'modify money'), +(@id+13, 'modify mount'), +(@id+14, 'modify phase'), +(@id+15, 'modify rage'), +(@id+16, 'modify reputation'), +(@id+17, 'modify runicpower'), +(@id+18, 'modify scale'), +(@id+19, 'modify speed'), +(@id+20, 'modify speed all'), +(@id+21, 'modify speed backwalk'), +(@id+22, 'modify speed fly'), +(@id+23, 'modify speed walk'), +(@id+24, 'modify speed swim'), +(@id+25, 'modify spell'), +(@id+26, 'modify standstate'), +(@id+27, 'modify talentpoints'); + + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+27; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(3, @id+0), +(3, @id+1), +(2, @id+2), +(2, @id+3), +(2, @id+4), +(2, @id+5), +(2, @id+6), +(2, @id+7), +(3, @id+8), +(2, @id+9), +(2, @id+10), +(2, @id+11), +(2, @id+12), +(2, @id+13), +(4, @id+14), +(2, @id+15), +(3, @id+16), +(2, @id+17), +(2, @id+18), +(2, @id+19), +(2, @id+20), +(2, @id+21), +(2, @id+22), +(2, @id+23), +(2, @id+24), +(2, @id+25), +(3, @id+26), +(2, @id+27); diff --git a/sql/updates/world/2013_09_10_07_world_command.sql b/sql/updates/world/2013_09_10_07_world_command.sql new file mode 100644 index 00000000000..b07da9730d1 --- /dev/null +++ b/sql/updates/world/2013_09_10_07_world_command.sql @@ -0,0 +1,33 @@ +/* cs_modify.cpp */ + +SET @id = 542; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'morph'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'demorph'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'modify'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'modify arenapoints'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'modify bit'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'modify drunk'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'modify energy'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'modify faction'; +UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'modify gender'; +UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'modify honor'; +UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'modify hp'; +UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'modify mana'; +UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'modify money'; +UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'modify mount'; +UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'modify phase'; +UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'modify rage'; +UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'modify reputation'; +UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'modify runicpower'; +UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'modify scale'; +UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'modify speed'; +UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'modify speed all'; +UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'modify speed backwalk'; +UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'modify speed fly'; +UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'modify speed walk'; +UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'modify speed swim'; +UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'modify spell'; +UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'modify standstate'; +UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'modify talentpoints'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 926b2769842..1d4a86107ec 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -441,6 +441,34 @@ enum RBACPermissions RBAC_PERM_COMMAND_MMAP_PATH = 539, RBAC_PERM_COMMAND_MMAP_STATS = 540, RBAC_PERM_COMMAND_MMAP_TESTAREA = 541, + RBAC_PERM_COMMAND_MORPH = 542, + RBAC_PERM_COMMAND_DEMORPH = 543, + RBAC_PERM_COMMAND_MODIFY = 544, + RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS = 545, + RBAC_PERM_COMMAND_MODIFY_BIT = 546, + RBAC_PERM_COMMAND_MODIFY_DRUNK = 547, + RBAC_PERM_COMMAND_MODIFY_ENERGY = 548, + RBAC_PERM_COMMAND_MODIFY_FACTION = 549, + RBAC_PERM_COMMAND_MODIFY_GENDER = 550, + RBAC_PERM_COMMAND_MODIFY_HONOR = 551, + RBAC_PERM_COMMAND_MODIFY_HP = 552, + RBAC_PERM_COMMAND_MODIFY_MANA = 553, + RBAC_PERM_COMMAND_MODIFY_MONEY = 554, + RBAC_PERM_COMMAND_MODIFY_MOUNT = 555, + RBAC_PERM_COMMAND_MODIFY_PHASE = 556, + RBAC_PERM_COMMAND_MODIFY_RAGE = 557, + RBAC_PERM_COMMAND_MODIFY_REPUTATION = 558, + RBAC_PERM_COMMAND_MODIFY_RUNICPOWER = 559, + RBAC_PERM_COMMAND_MODIFY_SCALE = 560, + RBAC_PERM_COMMAND_MODIFY_SPEED = 561, + RBAC_PERM_COMMAND_MODIFY_SPEED_ALL = 562, + RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK = 563, + RBAC_PERM_COMMAND_MODIFY_SPEED_FLY = 564, + RBAC_PERM_COMMAND_MODIFY_SPEED_WALK = 565, + RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM = 566, + RBAC_PERM_COMMAND_MODIFY_SPELL = 567, + RBAC_PERM_COMMAND_MODIFY_STANDSTATE = 568, + RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS = 569, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index c3d461f6170..ddd2522c8be 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -40,44 +40,44 @@ public: { static ChatCommand modifyspeedCommandTable[] = { - { "fly", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyFlyCommand, "", NULL }, - { "all", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyASpeedCommand, "", NULL }, - { "walk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySpeedCommand, "", NULL }, - { "backwalk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyBWalkCommand, "", NULL }, - { "swim", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySwimCommand, "", NULL }, - { "", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyASpeedCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "all", RBAC_PERM_COMMAND_MODIFY_SPEED_ALL, false, &HandleModifyASpeedCommand, "", NULL }, + { "backwalk", RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK, false, &HandleModifyBWalkCommand, "", NULL }, + { "fly", RBAC_PERM_COMMAND_MODIFY_SPEED_FLY, false, &HandleModifyFlyCommand, "", NULL }, + { "walk", RBAC_PERM_COMMAND_MODIFY_SPEED_WALK, false, &HandleModifySpeedCommand, "", NULL }, + { "swim", RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM, false, &HandleModifySwimCommand, "", NULL }, + { "", RBAC_PERM_COMMAND_MODIFY_SPEED, false, &HandleModifyASpeedCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand modifyCommandTable[] = { - { "hp", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyHPCommand, "", NULL }, - { "mana", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyManaCommand, "", NULL }, - { "rage", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyRageCommand, "", NULL }, - { "runicpower", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyRunicPowerCommand, "", NULL }, - { "energy", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyEnergyCommand, "", NULL }, - { "money", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyMoneyCommand, "", NULL }, - { "scale", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyScaleCommand, "", NULL }, - { "bit", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyBitCommand, "", NULL }, - { "faction", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyFactionCommand, "", NULL }, - { "spell", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySpellCommand, "", NULL }, - { "talentpoints", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyTalentCommand, "", NULL }, - { "mount", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyMountCommand, "", NULL }, - { "honor", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyHonorCommand, "", NULL }, - { "reputation", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyRepCommand, "", NULL }, - { "arenapoints", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyArenaCommand, "", NULL }, - { "drunk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyDrunkCommand, "", NULL }, - { "standstate", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyStandStateCommand, "", NULL }, - { "phase", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleModifyPhaseCommand, "", NULL }, - { "gender", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyGenderCommand, "", NULL }, - { "speed", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", modifyspeedCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "arenapoints", RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS, false, &HandleModifyArenaCommand, "", NULL }, + { "bit", RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "", NULL }, + { "drunk", RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "", NULL }, + { "energy", RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "", NULL }, + { "faction", RBAC_PERM_COMMAND_MODIFY_FACTION, false, &HandleModifyFactionCommand, "", NULL }, + { "gender", RBAC_PERM_COMMAND_MODIFY_GENDER, false, &HandleModifyGenderCommand, "", NULL }, + { "honor", RBAC_PERM_COMMAND_MODIFY_HONOR, false, &HandleModifyHonorCommand, "", NULL }, + { "hp", RBAC_PERM_COMMAND_MODIFY_HP, false, &HandleModifyHPCommand, "", NULL }, + { "mana", RBAC_PERM_COMMAND_MODIFY_MANA, false, &HandleModifyManaCommand, "", NULL }, + { "money", RBAC_PERM_COMMAND_MODIFY_MONEY, false, &HandleModifyMoneyCommand, "", NULL }, + { "mount", RBAC_PERM_COMMAND_MODIFY_MOUNT, false, &HandleModifyMountCommand, "", NULL }, + { "phase", RBAC_PERM_COMMAND_MODIFY_PHASE, false, &HandleModifyPhaseCommand, "", NULL }, + { "rage", RBAC_PERM_COMMAND_MODIFY_RAGE, false, &HandleModifyRageCommand, "", NULL }, + { "reputation", RBAC_PERM_COMMAND_MODIFY_REPUTATION, false, &HandleModifyRepCommand, "", NULL }, + { "runicpower", RBAC_PERM_COMMAND_MODIFY_RUNICPOWER, false, &HandleModifyRunicPowerCommand, "", NULL }, + { "scale", RBAC_PERM_COMMAND_MODIFY_SCALE, false, &HandleModifyScaleCommand, "", NULL }, + { "speed", RBAC_PERM_COMMAND_MODIFY_SPEED, false, NULL, "", modifyspeedCommandTable }, + { "spell", RBAC_PERM_COMMAND_MODIFY_SPELL, false, &HandleModifySpellCommand, "", NULL }, + { "standstate", RBAC_PERM_COMMAND_MODIFY_STANDSTATE, false, &HandleModifyStandStateCommand, "", NULL }, + { "talentpoints", RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS, false, &HandleModifyTalentCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "morph", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyMorphCommand, "", NULL }, - { "demorph", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleDeMorphCommand, "", NULL }, - { "modify", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", modifyCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "morph", RBAC_PERM_COMMAND_MORPH, false, &HandleModifyMorphCommand, "", NULL }, + { "demorph", RBAC_PERM_COMMAND_DEMORPH, false, &HandleDeMorphCommand, "", NULL }, + { "modify", RBAC_PERM_COMMAND_MODIFY, false, NULL, "", modifyCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From efa194a7ce68cadfffdfbd7b091fb381bd058b9f Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 13:48:57 +0200 Subject: Core/RBAC: Move npc commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_06_auth_misc.sql | 75 ++++++++++++++++++ sql/updates/world/2013_09_10_08_world_command.sql | 37 +++++++++ src/server/game/Accounts/RBAC.h | 32 ++++++++ src/server/scripts/Commands/cs_npc.cpp | 92 +++++++++++------------ 4 files changed, 188 insertions(+), 48 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_06_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_08_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_06_auth_misc.sql b/sql/updates/auth/2013_09_10_06_auth_misc.sql new file mode 100644 index 00000000000..e83e5e3cdf4 --- /dev/null +++ b/sql/updates/auth/2013_09_10_06_auth_misc.sql @@ -0,0 +1,75 @@ +/* cs_npc.cpp */ + +SET @id = 570; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+31; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'npc'), +(@id+1, 'npc add'), +(@id+2, 'npc add formation'), +(@id+3, 'npc add item'), +(@id+4, 'npc add move'), +(@id+5, 'npc add temp'), +(@id+6, 'npc add delete'), +(@id+7, 'npc add delete item'), +(@id+8, 'npc add follow'), +(@id+9, 'npc add follow stop'), +(@id+10, 'npc set'), +(@id+11, 'npc set allowmove'), +(@id+12, 'npc set entry'), +(@id+13, 'npc set factionid'), +(@id+14, 'npc set flag'), +(@id+15, 'npc set level'), +(@id+16, 'npc set link'), +(@id+17, 'npc set model'), +(@id+18, 'npc set movetype'), +(@id+19, 'npc set phase'), +(@id+20, 'npc set spawndist'), +(@id+21, 'npc set spawntime'), +(@id+22, 'npc set data'), +(@id+23, 'npc info'), +(@id+24, 'npc near'), +(@id+25, 'npc move'), +(@id+26, 'npc playemote'), +(@id+27, 'npc say'), +(@id+28, 'npc textemote'), +(@id+29, 'npc whisper'), +(@id+30, 'npc yell'), +(@id+31, 'npc tame'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+31; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(2, @id+0), +(3, @id+1), +(3, @id+2), +(3, @id+3), +(3, @id+4), +(3, @id+5), +(3, @id+6), +(3, @id+7), +(3, @id+8), +(3, @id+9), +(3, @id+10), +(4, @id+11), +(4, @id+12), +(3, @id+13), +(3, @id+14), +(3, @id+15), +(3, @id+16), +(3, @id+17), +(3, @id+18), +(3, @id+19), +(3, @id+20), +(3, @id+21), +(4, @id+22), +(4, @id+23), +(3, @id+24), +(3, @id+25), +(4, @id+26), +(2, @id+27), +(2, @id+28), +(2, @id+29), +(2, @id+30), +(3, @id+31); diff --git a/sql/updates/world/2013_09_10_08_world_command.sql b/sql/updates/world/2013_09_10_08_world_command.sql new file mode 100644 index 00000000000..5567a5fd248 --- /dev/null +++ b/sql/updates/world/2013_09_10_08_world_command.sql @@ -0,0 +1,37 @@ +/* cs_npc.cpp */ + +SET @id = 570; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'npc'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'npc add'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'npc add formation'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'npc add item'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'npc add move'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'npc add temp'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'npc add delete'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'npc add delete item'; +UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'npc add follow'; +UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'npc add follow stop'; +UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'npc set'; +UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'npc set allowmove'; +UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'npc set entry'; +UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'npc set factionid'; +UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'npc set flag'; +UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'npc set level'; +UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'npc set link'; +UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'npc set model'; +UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'npc set movetype'; +UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'npc set phase'; +UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'npc set spawndist'; +UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'npc set spawntime'; +UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'npc set data'; +UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'npc info'; +UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'npc near'; +UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'npc move'; +UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'npc playemote'; +UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'npc say'; +UPDATE `command` SET `permission` = @id+28 WHERE `name` = 'npc textemote'; +UPDATE `command` SET `permission` = @id+29 WHERE `name` = 'npc whisper'; +UPDATE `command` SET `permission` = @id+30 WHERE `name` = 'npc yell'; +UPDATE `command` SET `permission` = @id+31 WHERE `name` = 'npc tame'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 1d4a86107ec..3bdb8392656 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -469,6 +469,38 @@ enum RBACPermissions RBAC_PERM_COMMAND_MODIFY_SPELL = 567, RBAC_PERM_COMMAND_MODIFY_STANDSTATE = 568, RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS = 569, + RBAC_PERM_COMMAND_NPC = 570, + RBAC_PERM_COMMAND_NPC_ADD = 571, + RBAC_PERM_COMMAND_NPC_ADD_FORMATION = 572, + RBAC_PERM_COMMAND_NPC_ADD_ITEM = 573, + RBAC_PERM_COMMAND_NPC_ADD_MOVE = 574, + RBAC_PERM_COMMAND_NPC_ADD_TEMP = 575, + RBAC_PERM_COMMAND_NPC_DELETE = 576, + RBAC_PERM_COMMAND_NPC_DELETE_ITEM = 577, + RBAC_PERM_COMMAND_NPC_FOLLOW = 578, + RBAC_PERM_COMMAND_NPC_FOLLOW_STOP = 579, + RBAC_PERM_COMMAND_NPC_SET = 580, + RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE = 581, + RBAC_PERM_COMMAND_NPC_SET_ENTRY = 582, + RBAC_PERM_COMMAND_NPC_SET_FACTIONID = 583, + RBAC_PERM_COMMAND_NPC_SET_FLAG = 584, + RBAC_PERM_COMMAND_NPC_SET_LEVEL = 585, + RBAC_PERM_COMMAND_NPC_SET_LINK = 586, + RBAC_PERM_COMMAND_NPC_SET_MODEL = 587, + RBAC_PERM_COMMAND_NPC_SET_MOVETYPE = 588, + RBAC_PERM_COMMAND_NPC_SET_PHASE = 589, + RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST = 590, + RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME = 591, + RBAC_PERM_COMMAND_NPC_SET_DATA = 592, + RBAC_PERM_COMMAND_NPC_INFO = 593, + RBAC_PERM_COMMAND_NPC_NEAR = 594, + RBAC_PERM_COMMAND_NPC_MOVE = 595, + RBAC_PERM_COMMAND_NPC_PLAYEMOTE = 596, + RBAC_PERM_COMMAND_NPC_SAY = 597, + RBAC_PERM_COMMAND_NPC_TEXTEMOTE = 598, + RBAC_PERM_COMMAND_NPC_WHISPER = 599, + RBAC_PERM_COMMAND_NPC_YELL = 600, + RBAC_PERM_COMMAND_NPC_TAME = 601, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 0dfb7181fef..fc68036aa01 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -153,69 +153,65 @@ public: { static ChatCommand npcAddCommandTable[] = { - { "formation", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcAddFormationCommand, "", NULL }, - { "item", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddVendorItemCommand, "", NULL }, - { "move", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddMoveCommand, "", NULL }, - { "temp", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddTempSpawnCommand, "", NULL }, - //{@todo fix or remove this command - { "weapon", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcAddWeaponCommand, "", NULL }, - //} - { "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddCommand, "", NULL }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "formation", RBAC_PERM_COMMAND_NPC_ADD_FORMATION, false, &HandleNpcAddFormationCommand, "", NULL }, + { "item", RBAC_PERM_COMMAND_NPC_ADD_ITEM, false, &HandleNpcAddVendorItemCommand, "", NULL }, + { "move", RBAC_PERM_COMMAND_NPC_ADD_MOVE, false, &HandleNpcAddMoveCommand, "", NULL }, + { "temp", RBAC_PERM_COMMAND_NPC_ADD_TEMP, false, &HandleNpcAddTempSpawnCommand, "", NULL }, + //{ "weapon", RBAC_PERM_COMMAND_NPC_ADD_WEAPON, false, &HandleNpcAddWeaponCommand, "", NULL }, + { "", RBAC_PERM_COMMAND_NPC_ADD, false, &HandleNpcAddCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand npcDeleteCommandTable[] = { - { "item", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcDeleteVendorItemCommand, "", NULL }, - { "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcDeleteCommand, "", NULL }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "item", RBAC_PERM_COMMAND_NPC_DELETE_ITEM, false, &HandleNpcDeleteVendorItemCommand, "", NULL }, + { "", RBAC_PERM_COMMAND_NPC_DELETE, false, &HandleNpcDeleteCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand npcFollowCommandTable[] = { - { "stop", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcUnFollowCommand, "", NULL }, - { "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcFollowCommand, "", NULL }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "stop", RBAC_PERM_COMMAND_NPC_FOLLOW_STOP, false, &HandleNpcUnFollowCommand, "", NULL }, + { "", RBAC_PERM_COMMAND_NPC_FOLLOW, false, &HandleNpcFollowCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand npcSetCommandTable[] = { - { "allowmove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetAllowMovementCommand, "", NULL }, - { "entry", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetEntryCommand, "", NULL }, - { "factionid", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetFactionIdCommand, "", NULL }, - { "flag", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetFlagCommand, "", NULL }, - { "level", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetLevelCommand, "", NULL }, - { "link", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetLinkCommand, "", NULL }, - { "model", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetModelCommand, "", NULL }, - { "movetype", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetMoveTypeCommand, "", NULL }, - { "phase", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetPhaseCommand, "", NULL }, - { "spawndist", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSpawnDistCommand, "", NULL }, - { "spawntime", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSpawnTimeCommand, "", NULL }, - { "data", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetDataCommand, "", NULL }, - //{ @todo fix or remove these commands - { "name", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetNameCommand, "", NULL }, - { "subname", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSubNameCommand, "", NULL }, - //} - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "allowmove", RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE, false, &HandleNpcSetAllowMovementCommand, "", NULL }, + { "entry", RBAC_PERM_COMMAND_NPC_SET_ENTRY, false, &HandleNpcSetEntryCommand, "", NULL }, + { "factionid", RBAC_PERM_COMMAND_NPC_SET_FACTIONID, false, &HandleNpcSetFactionIdCommand, "", NULL }, + { "flag", RBAC_PERM_COMMAND_NPC_SET_FLAG, false, &HandleNpcSetFlagCommand, "", NULL }, + { "level", RBAC_PERM_COMMAND_NPC_SET_LEVEL, false, &HandleNpcSetLevelCommand, "", NULL }, + { "link", RBAC_PERM_COMMAND_NPC_SET_LINK, false, &HandleNpcSetLinkCommand, "", NULL }, + { "model", RBAC_PERM_COMMAND_NPC_SET_MODEL, false, &HandleNpcSetModelCommand, "", NULL }, + { "movetype", RBAC_PERM_COMMAND_NPC_SET_MOVETYPE, false, &HandleNpcSetMoveTypeCommand, "", NULL }, + { "phase", RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseCommand, "", NULL }, + { "spawndist", RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST, false, &HandleNpcSetSpawnDistCommand, "", NULL }, + { "spawntime", RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME, false, &HandleNpcSetSpawnTimeCommand, "", NULL }, + { "data", RBAC_PERM_COMMAND_NPC_SET_DATA, false, &HandleNpcSetDataCommand, "", NULL }, + //{ "name", RBAC_PERM_COMMAND_NPC_SET_NAME, false, &HandleNpcSetNameCommand, "", NULL }, + //{ "subname", RBAC_PERM_COMMAND_NPC_SET_SUBNAME, false, &HandleNpcSetSubNameCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand npcCommandTable[] = { - { "info", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcInfoCommand, "", NULL }, - { "near", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcNearCommand, "", NULL }, - { "move", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcMoveCommand, "", NULL }, - { "playemote", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcPlayEmoteCommand, "", NULL }, - { "say", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcSayCommand, "", NULL }, - { "textemote", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcTextEmoteCommand, "", NULL }, - { "whisper", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcWhisperCommand, "", NULL }, - { "yell", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcYellCommand, "", NULL }, - { "tame", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcTameCommand, "", NULL }, - { "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcAddCommandTable }, - { "delete", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcDeleteCommandTable }, - { "follow", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcFollowCommandTable }, - { "set", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcSetCommandTable }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "info", RBAC_PERM_COMMAND_NPC_INFO, false, &HandleNpcInfoCommand, "", NULL }, + { "near", RBAC_PERM_COMMAND_NPC_NEAR, false, &HandleNpcNearCommand, "", NULL }, + { "move", RBAC_PERM_COMMAND_NPC_MOVE, false, &HandleNpcMoveCommand, "", NULL }, + { "playemote", RBAC_PERM_COMMAND_NPC_PLAYEMOTE, false, &HandleNpcPlayEmoteCommand, "", NULL }, + { "say", RBAC_PERM_COMMAND_NPC_SAY, false, &HandleNpcSayCommand, "", NULL }, + { "textemote", RBAC_PERM_COMMAND_NPC_TEXTEMOTE, false, &HandleNpcTextEmoteCommand, "", NULL }, + { "whisper", RBAC_PERM_COMMAND_NPC_WHISPER, false, &HandleNpcWhisperCommand, "", NULL }, + { "yell", RBAC_PERM_COMMAND_NPC_YELL, false, &HandleNpcYellCommand, "", NULL }, + { "tame", RBAC_PERM_COMMAND_NPC_TAME, false, &HandleNpcTameCommand, "", NULL }, + { "add", RBAC_PERM_COMMAND_NPC_ADD, false, NULL, "", npcAddCommandTable }, + { "delete", RBAC_PERM_COMMAND_NPC_DELETE, false, NULL, "", npcDeleteCommandTable }, + { "follow", RBAC_PERM_COMMAND_NPC_FOLLOW, false, NULL, "", npcFollowCommandTable }, + { "set", RBAC_PERM_COMMAND_NPC_SET, false, NULL, "", npcSetCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "npc", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", npcCommandTable }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "npc", RBAC_PERM_COMMAND_NPC, false, NULL, "", npcCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From 4f632ee3ffd10ab667b349ae3394a90fe73d89be Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 13:57:30 +0200 Subject: Core/RBAC: Move quest commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_07_auth_misc.sql | 21 +++++++++++++++++++++ sql/updates/world/2013_09_10_09_world_command.sql | 10 ++++++++++ src/server/game/Accounts/RBAC.h | 5 +++++ src/server/scripts/Commands/cs_quest.cpp | 14 +++++++------- 4 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_07_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_09_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_07_auth_misc.sql b/sql/updates/auth/2013_09_10_07_auth_misc.sql new file mode 100644 index 00000000000..9988220d878 --- /dev/null +++ b/sql/updates/auth/2013_09_10_07_auth_misc.sql @@ -0,0 +1,21 @@ +/* cs_quest.cpp */ + +SET @id = 602; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+4; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'quest'), +(@id+1, 'quest add'), +(@id+2, 'quest complete'), +(@id+3, 'quest remove'), +(@id+4, 'quest reward'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+4; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(4, @id+0), +(4, @id+1), +(4, @id+2), +(4, @id+3), +(4, @id+4); diff --git a/sql/updates/world/2013_09_10_09_world_command.sql b/sql/updates/world/2013_09_10_09_world_command.sql new file mode 100644 index 00000000000..6523202aa24 --- /dev/null +++ b/sql/updates/world/2013_09_10_09_world_command.sql @@ -0,0 +1,10 @@ +/* cs_npc.cpp */ + +SET @id = 602; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'quest'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'quest add'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'quest complete'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'quest remove'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'quest reward'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 3bdb8392656..8d739554d46 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -501,6 +501,11 @@ enum RBACPermissions RBAC_PERM_COMMAND_NPC_WHISPER = 599, RBAC_PERM_COMMAND_NPC_YELL = 600, RBAC_PERM_COMMAND_NPC_TAME = 601, + RBAC_PERM_COMMAND_QUEST = 602, + RBAC_PERM_COMMAND_QUEST_ADD = 603, + RBAC_PERM_COMMAND_QUEST_COMPLETE = 604, + RBAC_PERM_COMMAND_QUEST_REMOVE = 605, + RBAC_PERM_COMMAND_QUEST_REWARD = 606, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 20515eb0921..3ad1fea74a2 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -37,16 +37,16 @@ public: { static ChatCommand questCommandTable[] = { - { "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestAdd, "", NULL }, - { "complete", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestComplete, "", NULL }, - { "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestRemove, "", NULL }, - { "reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestReward, "", NULL }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "add", RBAC_PERM_COMMAND_QUEST_ADD, false, &HandleQuestAdd, "", NULL }, + { "complete", RBAC_PERM_COMMAND_QUEST_COMPLETE, false, &HandleQuestComplete, "", NULL }, + { "remove", RBAC_PERM_COMMAND_QUEST_REMOVE, false, &HandleQuestRemove, "", NULL }, + { "reward", RBAC_PERM_COMMAND_QUEST_REWARD, false, &HandleQuestReward, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", questCommandTable }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "quest", RBAC_PERM_COMMAND_QUEST, false, NULL, "", questCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From 1f95f0b0b801496f7901c52e8407b1b3610d6ab1 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 14:25:07 +0200 Subject: Core/RBAC: Move reload command to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_08_auth_misc.sql | 217 ++++++++++++++++++++++ sql/updates/world/2013_09_10_10_world_command.sql | 108 +++++++++++ src/server/game/Accounts/RBAC.h | 103 ++++++++++ src/server/scripts/Commands/cs_reload.cpp | 216 ++++++++++----------- 4 files changed, 536 insertions(+), 108 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_08_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_10_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_08_auth_misc.sql b/sql/updates/auth/2013_09_10_08_auth_misc.sql new file mode 100644 index 00000000000..c735009b7da --- /dev/null +++ b/sql/updates/auth/2013_09_10_08_auth_misc.sql @@ -0,0 +1,217 @@ +/* cs_reload.cpp */ + +SET @id = 607; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+102; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'reload'), +(@id+1, 'reload access_requirement'), +(@id+2, 'reload achievement_criteria_data'), +(@id+3, 'reload achievement_reward'), +(@id+4, 'reload all'), +(@id+5, 'reload all achievement'), +(@id+6, 'reload all area'), +(@id+7, 'reload all eventai'), +(@id+8, 'reload all gossips'), +(@id+9, 'reload all item'), +(@id+10, 'reload all locales'), +(@id+11, 'reload all loot'), +(@id+12, 'reload all npc'), +(@id+13, 'reload all quest'), +(@id+14, 'reload all scripts'), +(@id+15, 'reload all spell'), +(@id+16, 'reload areatrigger_involvedrelation'), +(@id+17, 'reload areatrigger_tavern'), +(@id+18, 'reload areatrigger_teleport'), +(@id+19, 'reload auctions'), +(@id+20, 'reload autobroadcast'), +(@id+21, 'reload command'), +(@id+22, 'reload conditions'), +(@id+23, 'reload config'), +(@id+24, 'reload creature_text'), +(@id+25, 'reload creature_ai_scripts'), +(@id+26, 'reload creature_ai_texts'), +(@id+27, 'reload creature_questender'), +(@id+28, 'reload creature_linked_respawn'), +(@id+29, 'reload creature_loot_template'), +(@id+30, 'reload creature_onkill_reputation'), +(@id+31, 'reload creature_queststarter'), +(@id+32, 'reload creature_summon_groups'), +(@id+33, 'reload creature_template'), +(@id+34, 'reload disables'), +(@id+35, 'reload disenchant_loot_template'), +(@id+36, 'reload event_scripts'), +(@id+37, 'reload fishing_loot_template'), +(@id+38, 'reload game_graveyard_zone'), +(@id+39, 'reload game_tele'), +(@id+40, 'reload gameobject_questender'), +(@id+41, 'reload gameobject_loot_template'), +(@id+42, 'reload gameobject_queststarter'), +(@id+43, 'reload gm_tickets'), +(@id+44, 'reload gossip_menu'), +(@id+45, 'reload gossip_menu_option'), +(@id+46, 'reload item_enchantment_template'), +(@id+47, 'reload item_loot_template'), +(@id+48, 'reload item_set_names'), +(@id+49, 'reload lfg_dungeon_rewards'), +(@id+50, 'reload locales_achievement_reward'), +(@id+51, 'reload locales_creature'), +(@id+52, 'reload locales_creature_text'), +(@id+53, 'reload locales_gameobject'), +(@id+54, 'reload locales_gossip_menu_option'), +(@id+55, 'reload locales_item'), +(@id+56, 'reload locales_item_set_name'), +(@id+57, 'reload locales_npc_text'), +(@id+58, 'reload locales_page_text'), +(@id+59, 'reload locales_points_of_interest'), +(@id+60, 'reload locales_quest'), +(@id+61, 'reload mail_level_reward'), +(@id+62, 'reload mail_loot_template'), +(@id+63, 'reload milling_loot_template'), +(@id+64, 'reload npc_spellclick_spells'), +(@id+65, 'reload npc_trainer'), +(@id+66, 'reload npc_vendor'), +(@id+67, 'reload page_text'), +(@id+68, 'reload pickpocketing_loot_template'), +(@id+69, 'reload points_of_interest'), +(@id+70, 'reload prospecting_loot_template'), +(@id+71, 'reload quest_poi'), +(@id+72, 'reload quest_template'), +(@id+73, 'reload rbac'), +(@id+74, 'reload reference_loot_template'), +(@id+75, 'reload reserved_name'), +(@id+76, 'reload reputation_reward_rate'), +(@id+77, 'reload reputation_spillover_template'), +(@id+78, 'reload skill_discovery_template'), +(@id+79, 'reload skill_extra_item_template'), +(@id+80, 'reload skill_fishing_base_level'), +(@id+81, 'reload skinning_loot_template'), +(@id+82, 'reload smart_scripts'), +(@id+83, 'reload spell_required'), +(@id+84, 'reload spell_area'), +(@id+85, 'reload spell_bonus_data'), +(@id+86, 'reload spell_group'), +(@id+87, 'reload spell_learn_spell'), +(@id+88, 'reload spell_loot_template'), +(@id+89, 'reload spell_linked_spell'), +(@id+90, 'reload spell_pet_auras'), +(@id+91, 'reload spell_proc_event'), +(@id+92, 'reload spell_proc'), +(@id+93, 'reload spell_scripts'), +(@id+94, 'reload spell_target_position'), +(@id+95, 'reload spell_threats'), +(@id+96, 'reload spell_group_stack_rules'), +(@id+97, 'reload trinity_string'), +(@id+98, 'reload warden_action'), +(@id+99, 'reload waypoint_scripts'), +(@id+100, 'reload waypoint_data'), +(@id+101, 'reload vehicle_accessory'), +(@id+102, 'reload vehicle_template_accessory'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+102; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(4, @id+0), +(4, @id+1), +(4, @id+2), +(4, @id+3), +(4, @id+4), +(4, @id+5), +(4, @id+6), +(4, @id+7), +(4, @id+8), +(4, @id+9), +(4, @id+10), +(4, @id+11), +(4, @id+12), +(4, @id+13), +(4, @id+14), +(4, @id+15), +(4, @id+16), +(4, @id+17), +(4, @id+18), +(4, @id+19), +(4, @id+20), +(4, @id+21), +(4, @id+22), +(4, @id+23), +(4, @id+24), +(4, @id+25), +(4, @id+26), +(4, @id+27), +(4, @id+28), +(4, @id+29), +(4, @id+30), +(4, @id+31), +(4, @id+32), +(4, @id+33), +(4, @id+34), +(4, @id+35), +(4, @id+36), +(4, @id+37), +(4, @id+38), +(4, @id+39), +(4, @id+40), +(4, @id+41), +(4, @id+42), +(4, @id+43), +(4, @id+44), +(4, @id+45), +(4, @id+46), +(4, @id+47), +(4, @id+48), +(4, @id+49), +(4, @id+50), +(4, @id+51), +(4, @id+52), +(4, @id+53), +(4, @id+54), +(4, @id+55), +(4, @id+56), +(4, @id+57), +(4, @id+58), +(4, @id+59), +(4, @id+60), +(4, @id+61), +(4, @id+62), +(4, @id+63), +(4, @id+64), +(4, @id+65), +(4, @id+66), +(4, @id+67), +(4, @id+68), +(4, @id+69), +(4, @id+70), +(4, @id+71), +(4, @id+72), +(4, @id+73), +(4, @id+74), +(4, @id+75), +(4, @id+76), +(4, @id+77), +(4, @id+78), +(4, @id+79), +(4, @id+80), +(4, @id+81), +(4, @id+82), +(4, @id+83), +(4, @id+84), +(4, @id+85), +(4, @id+86), +(4, @id+87), +(4, @id+88), +(4, @id+89), +(4, @id+90), +(4, @id+91), +(4, @id+92), +(4, @id+93), +(4, @id+94), +(4, @id+95), +(4, @id+96), +(4, @id+97), +(4, @id+98), +(4, @id+99), +(4, @id+100), +(4, @id+101), +(4, @id+102); diff --git a/sql/updates/world/2013_09_10_10_world_command.sql b/sql/updates/world/2013_09_10_10_world_command.sql new file mode 100644 index 00000000000..4249ff1ad5b --- /dev/null +++ b/sql/updates/world/2013_09_10_10_world_command.sql @@ -0,0 +1,108 @@ +/* cs_npc.cpp */ + +SET @id = 607; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'reload'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'reload access_requirement'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'reload achievement_criteria_data'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'reload achievement_reward'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'reload all'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'reload all achievement'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'reload all area'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'reload all eventai'; +UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'reload all gossips'; +UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'reload all item'; +UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'reload all locales'; +UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'reload all loot'; +UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'reload all npc'; +UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'reload all quest'; +UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'reload all scripts'; +UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'reload all spell'; +UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'reload areatrigger_involvedrelation'; +UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'reload areatrigger_tavern'; +UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'reload areatrigger_teleport'; +UPDATE `command` SET `permission` = @id+19 WHERE `name` = 'reload auctions'; +UPDATE `command` SET `permission` = @id+20 WHERE `name` = 'reload autobroadcast'; +UPDATE `command` SET `permission` = @id+21 WHERE `name` = 'reload command'; +UPDATE `command` SET `permission` = @id+22 WHERE `name` = 'reload conditions'; +UPDATE `command` SET `permission` = @id+23 WHERE `name` = 'reload config'; +UPDATE `command` SET `permission` = @id+24 WHERE `name` = 'reload creature_text'; +UPDATE `command` SET `permission` = @id+25 WHERE `name` = 'reload creature_ai_scripts'; +UPDATE `command` SET `permission` = @id+26 WHERE `name` = 'reload creature_ai_texts'; +UPDATE `command` SET `permission` = @id+27 WHERE `name` = 'reload creature_questender'; +UPDATE `command` SET `permission` = @id+28 WHERE `name` = 'reload creature_linked_respawn'; +UPDATE `command` SET `permission` = @id+29 WHERE `name` = 'reload creature_loot_template'; +UPDATE `command` SET `permission` = @id+30 WHERE `name` = 'reload creature_onkill_reputation'; +UPDATE `command` SET `permission` = @id+31 WHERE `name` = 'reload creature_queststarter'; +UPDATE `command` SET `permission` = @id+32 WHERE `name` = 'reload creature_summon_groups'; +UPDATE `command` SET `permission` = @id+33 WHERE `name` = 'reload creature_template'; +UPDATE `command` SET `permission` = @id+34 WHERE `name` = 'reload disables'; +UPDATE `command` SET `permission` = @id+35 WHERE `name` = 'reload disenchant_loot_template'; +UPDATE `command` SET `permission` = @id+36 WHERE `name` = 'reload event_scripts'; +UPDATE `command` SET `permission` = @id+37 WHERE `name` = 'reload fishing_loot_template'; +UPDATE `command` SET `permission` = @id+38 WHERE `name` = 'reload game_graveyard_zone'; +UPDATE `command` SET `permission` = @id+39 WHERE `name` = 'reload game_tele'; +UPDATE `command` SET `permission` = @id+40 WHERE `name` = 'reload gameobject_questender'; +UPDATE `command` SET `permission` = @id+41 WHERE `name` = 'reload gameobject_loot_template'; +UPDATE `command` SET `permission` = @id+42 WHERE `name` = 'reload gameobject_queststarter'; +UPDATE `command` SET `permission` = @id+43 WHERE `name` = 'reload gm_tickets'; +UPDATE `command` SET `permission` = @id+44 WHERE `name` = 'reload gossip_menu'; +UPDATE `command` SET `permission` = @id+45 WHERE `name` = 'reload gossip_menu_option'; +UPDATE `command` SET `permission` = @id+46 WHERE `name` = 'reload item_enchantment_template'; +UPDATE `command` SET `permission` = @id+47 WHERE `name` = 'reload item_loot_template'; +UPDATE `command` SET `permission` = @id+48 WHERE `name` = 'reload item_set_names'; +UPDATE `command` SET `permission` = @id+49 WHERE `name` = 'reload lfg_dungeon_rewards'; +UPDATE `command` SET `permission` = @id+50 WHERE `name` = 'reload locales_achievement_reward'; +UPDATE `command` SET `permission` = @id+51 WHERE `name` = 'reload locales_creature'; +UPDATE `command` SET `permission` = @id+52 WHERE `name` = 'reload locales_creature_text'; +UPDATE `command` SET `permission` = @id+53 WHERE `name` = 'reload locales_gameobject'; +UPDATE `command` SET `permission` = @id+54 WHERE `name` = 'reload locales_gossip_menu_option'; +UPDATE `command` SET `permission` = @id+55 WHERE `name` = 'reload locales_item'; +UPDATE `command` SET `permission` = @id+56 WHERE `name` = 'reload locales_item_set_name'; +UPDATE `command` SET `permission` = @id+57 WHERE `name` = 'reload locales_npc_text'; +UPDATE `command` SET `permission` = @id+58 WHERE `name` = 'reload locales_page_text'; +UPDATE `command` SET `permission` = @id+59 WHERE `name` = 'reload locales_points_of_interest'; +UPDATE `command` SET `permission` = @id+60 WHERE `name` = 'reload locales_quest'; +UPDATE `command` SET `permission` = @id+61 WHERE `name` = 'reload mail_level_reward'; +UPDATE `command` SET `permission` = @id+62 WHERE `name` = 'reload mail_loot_template'; +UPDATE `command` SET `permission` = @id+63 WHERE `name` = 'reload milling_loot_template'; +UPDATE `command` SET `permission` = @id+64 WHERE `name` = 'reload npc_spellclick_spells'; +UPDATE `command` SET `permission` = @id+65 WHERE `name` = 'reload npc_trainer'; +UPDATE `command` SET `permission` = @id+66 WHERE `name` = 'reload npc_vendor'; +UPDATE `command` SET `permission` = @id+67 WHERE `name` = 'reload page_text'; +UPDATE `command` SET `permission` = @id+68 WHERE `name` = 'reload pickpocketing_loot_template'; +UPDATE `command` SET `permission` = @id+69 WHERE `name` = 'reload points_of_interest'; +UPDATE `command` SET `permission` = @id+70 WHERE `name` = 'reload prospecting_loot_template'; +UPDATE `command` SET `permission` = @id+71 WHERE `name` = 'reload quest_poi'; +UPDATE `command` SET `permission` = @id+72 WHERE `name` = 'reload quest_template'; +UPDATE `command` SET `permission` = @id+73 WHERE `name` = 'reload rbac'; +UPDATE `command` SET `permission` = @id+74 WHERE `name` = 'reload reference_loot_template'; +UPDATE `command` SET `permission` = @id+75 WHERE `name` = 'reload reserved_name'; +UPDATE `command` SET `permission` = @id+76 WHERE `name` = 'reload reputation_reward_rate'; +UPDATE `command` SET `permission` = @id+77 WHERE `name` = 'reload reputation_spillover_template'; +UPDATE `command` SET `permission` = @id+78 WHERE `name` = 'reload skill_discovery_template'; +UPDATE `command` SET `permission` = @id+79 WHERE `name` = 'reload skill_extra_item_template'; +UPDATE `command` SET `permission` = @id+80 WHERE `name` = 'reload skill_fishing_base_level'; +UPDATE `command` SET `permission` = @id+81 WHERE `name` = 'reload skinning_loot_template'; +UPDATE `command` SET `permission` = @id+82 WHERE `name` = 'reload smart_scripts'; +UPDATE `command` SET `permission` = @id+83 WHERE `name` = 'reload spell_required'; +UPDATE `command` SET `permission` = @id+84 WHERE `name` = 'reload spell_area'; +UPDATE `command` SET `permission` = @id+85 WHERE `name` = 'reload spell_bonus_data'; +UPDATE `command` SET `permission` = @id+86 WHERE `name` = 'reload spell_group'; +UPDATE `command` SET `permission` = @id+87 WHERE `name` = 'reload spell_learn_spell'; +UPDATE `command` SET `permission` = @id+88 WHERE `name` = 'reload spell_loot_template'; +UPDATE `command` SET `permission` = @id+89 WHERE `name` = 'reload spell_linked_spell'; +UPDATE `command` SET `permission` = @id+90 WHERE `name` = 'reload spell_pet_auras'; +UPDATE `command` SET `permission` = @id+91 WHERE `name` = 'reload spell_proc_event'; +UPDATE `command` SET `permission` = @id+92 WHERE `name` = 'reload spell_proc'; +UPDATE `command` SET `permission` = @id+93 WHERE `name` = 'reload spell_scripts'; +UPDATE `command` SET `permission` = @id+94 WHERE `name` = 'reload spell_target_position'; +UPDATE `command` SET `permission` = @id+95 WHERE `name` = 'reload spell_threats'; +UPDATE `command` SET `permission` = @id+96 WHERE `name` = 'reload spell_group_stack_rules'; +UPDATE `command` SET `permission` = @id+97 WHERE `name` = 'reload trinity_string'; +UPDATE `command` SET `permission` = @id+98 WHERE `name` = 'reload warden_action'; +UPDATE `command` SET `permission` = @id+99 WHERE `name` = 'reload waypoint_scripts'; +UPDATE `command` SET `permission` = @id+100 WHERE `name` = 'reload waypoint_data'; +UPDATE `command` SET `permission` = @id+101 WHERE `name` = 'reload vehicle_accessory'; +UPDATE `command` SET `permission` = @id+102 WHERE `name` = 'reload vehicle_template_accessory'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 8d739554d46..6d6e483a874 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -506,6 +506,109 @@ enum RBACPermissions RBAC_PERM_COMMAND_QUEST_COMPLETE = 604, RBAC_PERM_COMMAND_QUEST_REMOVE = 605, RBAC_PERM_COMMAND_QUEST_REWARD = 606, + RBAC_PERM_COMMANDS_RELOAD = 607, + RBAC_PERM_COMMANDS_RELOAD_ACCESS_REQUIREMENT = 608, + RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_CRITERIA_DATA = 609, + RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_REWARD = 610, + RBAC_PERM_COMMANDS_RELOAD_ALL = 611, + RBAC_PERM_COMMANDS_RELOAD_ALL_ACHIEVEMENT = 612, + RBAC_PERM_COMMANDS_RELOAD_ALL_AREA = 613, + RBAC_PERM_COMMANDS_RELOAD_ALL_EVENTAI = 614, + RBAC_PERM_COMMANDS_RELOAD_ALL_GOSSIP = 615, + RBAC_PERM_COMMANDS_RELOAD_ALL_ITEM = 616, + RBAC_PERM_COMMANDS_RELOAD_ALL_LOCALES = 617, + RBAC_PERM_COMMANDS_RELOAD_ALL_LOOT = 618, + RBAC_PERM_COMMANDS_RELOAD_ALL_NPC = 619, + RBAC_PERM_COMMANDS_RELOAD_ALL_QUEST = 620, + RBAC_PERM_COMMANDS_RELOAD_ALL_SCRIPTS = 621, + RBAC_PERM_COMMANDS_RELOAD_ALL_SPELL = 622, + RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_INVOLVEDRELATION = 623, + RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TAVERN = 624, + RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TELEPORT = 625, + RBAC_PERM_COMMANDS_RELOAD_AUCTIONS = 626, + RBAC_PERM_COMMANDS_RELOAD_AUTOBROADCAST = 627, + RBAC_PERM_COMMANDS_RELOAD_COMMAND = 628, + RBAC_PERM_COMMANDS_RELOAD_CONDITIONS = 629, + RBAC_PERM_COMMANDS_RELOAD_CONFIG = 630, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_SCRIPTS = 631, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_TEXTS = 632, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_LINKED_RESPAWN = 633, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_LOOT_TEMPLATE = 634, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_ONKILL_REPUTATION = 635, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTENDER = 636, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTSTARTER = 637, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_SUMMON_GROUPS = 638, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEMPLATE = 639, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEXT = 640, + RBAC_PERM_COMMANDS_RELOAD_DISABLES = 641, + RBAC_PERM_COMMANDS_RELOAD_DISENCHANT_LOOT_TEMPLATE = 642, + RBAC_PERM_COMMANDS_RELOAD_EVENT_SCRIPTS = 643, + RBAC_PERM_COMMANDS_RELOAD_FISHING_LOOT_TEMPLATE = 644, + RBAC_PERM_COMMANDS_RELOAD_GAME_GRAVEYARD_ZONE = 645, + RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTENDER = 646, + RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE = 647, + RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTSTARTER = 648, + RBAC_PERM_COMMANDS_RELOAD_GAME_TELE = 649, + RBAC_PERM_COMMANDS_RELOAD_GM_TICKETS = 650, + RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU = 651, + RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU_OPTION = 652, + RBAC_PERM_COMMANDS_RELOAD_ITEM_ENCHANTMENT_TEMPLATE = 653, + RBAC_PERM_COMMANDS_RELOAD_ITEM_LOOT_TEMPLATE = 654, + RBAC_PERM_COMMANDS_RELOAD_ITEM_SET_NAMES = 655, + RBAC_PERM_COMMANDS_RELOAD_LFG_DUNGEON_REWARDS = 656, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_ACHIEVEMENT_REWARD = 657, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE = 658, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE_TEXT = 659, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_GAMEOBJECT = 660, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_GOSSIP_MENU_OPTION = 661, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM = 662, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM_SET_NAME = 663, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_NPC_TEXT = 664, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_PAGE_TEXT = 665, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_POINTS_OF_INTEREST = 666, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_QUEST = 667, + RBAC_PERM_COMMANDS_RELOAD_MAIL_LEVEL_REWARD = 668, + RBAC_PERM_COMMANDS_RELOAD_MAIL_LOOT_TEMPLATE = 669, + RBAC_PERM_COMMANDS_RELOAD_MILLING_LOOT_TEMPLATE = 670, + RBAC_PERM_COMMANDS_RELOAD_NPC_SPELLCLICK_SPELLS = 671, + RBAC_PERM_COMMANDS_RELOAD_NPC_TRAINER = 672, + RBAC_PERM_COMMANDS_RELOAD_NPC_VENDOR = 673, + RBAC_PERM_COMMANDS_RELOAD_PAGE_TEXT = 674, + RBAC_PERM_COMMANDS_RELOAD_PICKPOCKETING_LOOT_TEMPLATE = 675, + RBAC_PERM_COMMANDS_RELOAD_POINTS_OF_INTEREST = 676, + RBAC_PERM_COMMANDS_RELOAD_PROSPECTING_LOOT_TEMPLATE = 677, + RBAC_PERM_COMMANDS_RELOAD_QUEST_POI = 678, + RBAC_PERM_COMMANDS_RELOAD_QUEST_TEMPLATE = 679, + RBAC_PERM_COMMANDS_RELOAD_RBAC = 680, + RBAC_PERM_COMMANDS_RELOAD_REFERENCE_LOOT_TEMPLATE = 681, + RBAC_PERM_COMMANDS_RELOAD_REPUTATION_REWARD_RATE = 682, + RBAC_PERM_COMMANDS_RELOAD_RESERVED_NAME = 683, + RBAC_PERM_COMMANDS_RELOAD_SKILL_DISCOVERY_TEMPLATE = 684, + RBAC_PERM_COMMANDS_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE = 685, + RBAC_PERM_COMMANDS_RELOAD_SKILL_FISHING_BASE_LEVEL = 686, + RBAC_PERM_COMMANDS_RELOAD_SKINNING_LOOT_TEMPLATE = 687, + RBAC_PERM_COMMANDS_RELOAD_SMART_SCRIPTS = 688, + RBAC_PERM_COMMANDS_RELOAD_SPELL_AREA = 689, + RBAC_PERM_COMMANDS_RELOAD_SPELL_BONUS_DATA = 690, + RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP = 691, + RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP_STACK_RULES = 692, + RBAC_PERM_COMMANDS_RELOAD_SPELL_LEARN_SPELL = 693, + RBAC_PERM_COMMANDS_RELOAD_SPELL_LINKED_SPELL = 694, + RBAC_PERM_COMMANDS_RELOAD_SPELL_LOOT_TEMPLATE = 695, + RBAC_PERM_COMMANDS_RELOAD_SPELL_PET_AURAS = 696, + RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC = 697, + RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC_EVENT = 698, + RBAC_PERM_COMMANDS_RELOAD_SPELL_REQUIRED = 699, + RBAC_PERM_COMMANDS_RELOAD_SPELL_SCRIPTS = 700, + RBAC_PERM_COMMANDS_RELOAD_SPELL_TARGET_POSITION = 701, + RBAC_PERM_COMMANDS_RELOAD_SPELL_THREATS = 702, + RBAC_PERM_COMMANDS_RELOAD_SPILLOVER_TEMPLATE = 703, + RBAC_PERM_COMMANDS_RELOAD_TRINITY_STRING = 704, + RBAC_PERM_COMMANDS_RELOAD_VEHICLE_ACCESORY = 705, + RBAC_PERM_COMMANDS_RELOAD_VEHICLE_TEMPLATE_ACCESSORY = 706, + RBAC_PERM_COMMANDS_RELOAD_WARDEN_ACTION = 707, + RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_DATA = 708, + RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_SCRIPTS = 709, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 36b1c76110d..901a331b4b4 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -51,120 +51,120 @@ public: { static ChatCommand reloadAllCommandTable[] = { - { "achievement", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllAchievementCommand, "", NULL }, - { "area", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllAreaCommand, "", NULL }, - { "eventai", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllEventAICommand, "", NULL }, - { "gossips", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllGossipsCommand, "", NULL }, - { "item", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllItemCommand, "", NULL }, - { "locales", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllLocalesCommand, "", NULL }, - { "loot", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllLootCommand, "", NULL }, - { "npc", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllNpcCommand, "", NULL }, - { "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllQuestCommand, "", NULL }, - { "scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllScriptsCommand, "", NULL }, - { "spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllSpellCommand, "", NULL }, - { "", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "achievement", RBAC_PERM_COMMANDS_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL }, + { "area", RBAC_PERM_COMMANDS_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL }, + { "eventai", RBAC_PERM_COMMANDS_RELOAD_ALL_EVENTAI, true, &HandleReloadAllEventAICommand, "", NULL }, + { "gossips", RBAC_PERM_COMMANDS_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL }, + { "item", RBAC_PERM_COMMANDS_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL }, + { "locales", RBAC_PERM_COMMANDS_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL }, + { "loot", RBAC_PERM_COMMANDS_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL }, + { "npc", RBAC_PERM_COMMANDS_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL }, + { "quest", RBAC_PERM_COMMANDS_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL }, + { "scripts", RBAC_PERM_COMMANDS_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL }, + { "spell", RBAC_PERM_COMMANDS_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL }, + { "", RBAC_PERM_COMMANDS_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand reloadCommandTable[] = { - { "auctions", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAuctionsCommand, "", NULL }, - { "access_requirement", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAccessRequirementCommand, "", NULL }, - { "achievement_criteria_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL }, - { "achievement_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAchievementRewardCommand, "", NULL }, - { "all", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", reloadAllCommandTable }, - { "areatrigger_involvedrelation", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestAreaTriggersCommand, "", NULL }, - { "areatrigger_tavern", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAreaTriggerTavernCommand, "", NULL }, - { "areatrigger_teleport", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL }, - { "autobroadcast", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAutobroadcastCommand, "", NULL }, - { "command", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCommandCommand, "", NULL }, - { "conditions", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadConditions, "", NULL }, - { "config", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadConfigCommand, "", NULL }, - { "creature_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureText, "", NULL }, - { "creature_ai_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadEventAIScriptsCommand, "", NULL }, - { "creature_ai_texts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadEventAITextsCommand, "", NULL }, - { "creature_questender", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureQuestEnderCommand, "", NULL }, - { "creature_linked_respawn", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleReloadLinkedRespawnCommand, "", NULL }, - { "creature_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL }, - { "creature_onkill_reputation", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadOnKillReputationCommand, "", NULL }, - { "creature_queststarter", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureQuestStarterCommand, "", NULL }, - { "creature_summon_groups", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL }, - { "creature_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureTemplateCommand, "", NULL }, - //{ "db_script_string", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadDbScriptStringCommand, "", NULL }, - { "disables", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadDisablesCommand, "", NULL }, - { "disenchant_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL }, - { "event_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadEventScriptsCommand, "", NULL }, - { "fishing_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesFishingCommand, "", NULL }, - { "game_graveyard_zone", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGameGraveyardZoneCommand, "", NULL }, - { "game_tele", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGameTeleCommand, "", NULL }, - { "gameobject_questender", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGOQuestEnderCommand, "", NULL }, - { "gameobject_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL }, - { "gameobject_queststarter", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGOQuestStarterCommand, "", NULL }, - { "gm_tickets", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGMTicketsCommand, "", NULL }, - { "gossip_menu", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGossipMenuCommand, "", NULL }, - { "gossip_menu_option", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGossipMenuOptionCommand, "", NULL }, - { "item_enchantment_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadItemEnchantementsCommand, "", NULL }, - { "item_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesItemCommand, "", NULL }, - { "item_set_names", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadItemSetNamesCommand, "", NULL }, - { "lfg_dungeon_rewards", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLfgRewardsCommand, "", NULL }, - { "locales_achievement_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL }, - { "locales_creature", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesCreatureCommand, "", NULL }, - { "locales_creature_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesCreatureTextCommand, "", NULL }, - { "locales_gameobject", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesGameobjectCommand, "", NULL }, - { "locales_gossip_menu_option", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL }, - { "locales_item", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesItemCommand, "", NULL }, - { "locales_item_set_name", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesItemSetNameCommand, "", NULL }, - { "locales_npc_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesNpcTextCommand, "", NULL }, - { "locales_page_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesPageTextCommand, "", NULL }, - { "locales_points_of_interest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL }, - { "locales_quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesQuestCommand, "", NULL }, - { "mail_level_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadMailLevelRewardCommand, "", NULL }, - { "mail_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesMailCommand, "", NULL }, - { "milling_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesMillingCommand, "", NULL }, - { "npc_spellclick_spells", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellClickSpellsCommand, "", NULL}, - { "npc_trainer", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadNpcTrainerCommand, "", NULL }, - { "npc_vendor", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadNpcVendorCommand, "", NULL }, - { "page_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadPageTextsCommand, "", NULL }, - { "pickpocketing_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL}, - { "points_of_interest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadPointsOfInterestCommand, "", NULL }, - { "prospecting_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL }, - { "quest_poi", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestPOICommand, "", NULL }, - { "quest_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestTemplateCommand, "", NULL }, - { "rbac", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadRBACCommand, "", NULL }, - { "reference_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL }, - { "reserved_name", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReservedNameCommand, "", NULL }, - { "reputation_reward_rate", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReputationRewardRateCommand, "", NULL }, - { "reputation_spillover_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReputationRewardRateCommand, "", NULL }, - { "skill_discovery_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL }, - { "skill_extra_item_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL }, - { "skill_fishing_base_level", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL }, - { "skinning_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL }, - { "smart_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSmartScripts, "", NULL }, - { "spell_required", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellRequiredCommand, "", NULL }, - { "spell_area", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellAreaCommand, "", NULL }, - { "spell_bonus_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellBonusesCommand, "", NULL }, - { "spell_group", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellGroupsCommand, "", NULL }, - { "spell_learn_spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellLearnSpellCommand, "", NULL }, - { "spell_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesSpellCommand, "", NULL }, - { "spell_linked_spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellLinkedSpellCommand, "", NULL }, - { "spell_pet_auras", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellPetAurasCommand, "", NULL }, - { "spell_proc_event", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellProcEventCommand, "", NULL }, - { "spell_proc", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellProcsCommand, "", NULL }, - { "spell_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellScriptsCommand, "", NULL }, - { "spell_target_position", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellTargetPositionCommand, "", NULL }, - { "spell_threats", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellThreatsCommand, "", NULL }, - { "spell_group_stack_rules", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL }, - { "trinity_string", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadTrinityStringCommand, "", NULL }, - { "warden_action", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWardenactionCommand, "", NULL }, - { "waypoint_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWpScriptsCommand, "", NULL }, - { "waypoint_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWpCommand, "", NULL }, - { "vehicle_accessory", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadVehicleAccessoryCommand, "", NULL }, - { "vehicle_template_accessory", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "auctions", RBAC_PERM_COMMANDS_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL }, + { "access_requirement", RBAC_PERM_COMMANDS_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL }, + { "achievement_criteria_data", RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL }, + { "achievement_reward", RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL }, + { "all", RBAC_PERM_COMMANDS_RELOAD_ALL, true, NULL, "", reloadAllCommandTable }, + { "areatrigger_involvedrelation", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL }, + { "areatrigger_tavern", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL }, + { "areatrigger_teleport", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL }, + { "autobroadcast", RBAC_PERM_COMMANDS_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL }, + { "command", RBAC_PERM_COMMANDS_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL }, + { "conditions", RBAC_PERM_COMMANDS_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL }, + { "config", RBAC_PERM_COMMANDS_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL }, + { "creature_text", RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL }, + { "creature_ai_scripts", RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_SCRIPTS, true, &HandleReloadEventAIScriptsCommand, "", NULL }, + { "creature_ai_texts", RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_TEXTS, true, &HandleReloadEventAITextsCommand, "", NULL }, + { "creature_questender", RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL }, + { "creature_linked_respawn", RBAC_PERM_COMMANDS_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL }, + { "creature_loot_template", RBAC_PERM_COMMANDS_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL }, + { "creature_onkill_reputation", RBAC_PERM_COMMANDS_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL }, + { "creature_queststarter", RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL }, + { "creature_summon_groups", RBAC_PERM_COMMANDS_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL }, + { "creature_template", RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL }, + //{ "db_script_string", RBAC_PERM_COMMANDS_RELOAD_, true, &HandleReloadDbScriptStringCommand, "", NULL }, + { "disables", RBAC_PERM_COMMANDS_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL }, + { "disenchant_loot_template", RBAC_PERM_COMMANDS_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL }, + { "event_scripts", RBAC_PERM_COMMANDS_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL }, + { "fishing_loot_template", RBAC_PERM_COMMANDS_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL }, + { "game_graveyard_zone", RBAC_PERM_COMMANDS_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL }, + { "game_tele", RBAC_PERM_COMMANDS_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL }, + { "gameobject_questender", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL }, + { "gameobject_loot_template", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL }, + { "gameobject_queststarter", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL }, + { "gm_tickets", RBAC_PERM_COMMANDS_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL }, + { "gossip_menu", RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL }, + { "gossip_menu_option", RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL }, + { "item_enchantment_template", RBAC_PERM_COMMANDS_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL }, + { "item_loot_template", RBAC_PERM_COMMANDS_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL }, + { "item_set_names", RBAC_PERM_COMMANDS_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "", NULL }, + { "lfg_dungeon_rewards", RBAC_PERM_COMMANDS_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL }, + { "locales_achievement_reward", RBAC_PERM_COMMANDS_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL }, + { "locales_creature", RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL }, + { "locales_creature_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL }, + { "locales_gameobject", RBAC_PERM_COMMANDS_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL }, + { "locales_gossip_menu_option", RBAC_PERM_COMMANDS_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL }, + { "locales_item", RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL }, + { "locales_item_set_name", RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "", NULL }, + { "locales_npc_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL }, + { "locales_page_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL }, + { "locales_points_of_interest", RBAC_PERM_COMMANDS_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL }, + { "locales_quest", RBAC_PERM_COMMANDS_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL }, + { "mail_level_reward", RBAC_PERM_COMMANDS_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL }, + { "mail_loot_template", RBAC_PERM_COMMANDS_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL }, + { "milling_loot_template", RBAC_PERM_COMMANDS_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL }, + { "npc_spellclick_spells", RBAC_PERM_COMMANDS_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL}, + { "npc_trainer", RBAC_PERM_COMMANDS_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL }, + { "npc_vendor", RBAC_PERM_COMMANDS_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL }, + { "page_text", RBAC_PERM_COMMANDS_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL }, + { "pickpocketing_loot_template", RBAC_PERM_COMMANDS_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL}, + { "points_of_interest", RBAC_PERM_COMMANDS_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL }, + { "prospecting_loot_template", RBAC_PERM_COMMANDS_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL }, + { "quest_poi", RBAC_PERM_COMMANDS_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL }, + { "quest_template", RBAC_PERM_COMMANDS_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL }, + { "rbac", RBAC_PERM_COMMANDS_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL }, + { "reference_loot_template", RBAC_PERM_COMMANDS_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL }, + { "reserved_name", RBAC_PERM_COMMANDS_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL }, + { "reputation_reward_rate", RBAC_PERM_COMMANDS_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL }, + { "reputation_spillover_template", RBAC_PERM_COMMANDS_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL }, + { "skill_discovery_template", RBAC_PERM_COMMANDS_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL }, + { "skill_extra_item_template", RBAC_PERM_COMMANDS_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL }, + { "skill_fishing_base_level", RBAC_PERM_COMMANDS_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL }, + { "skinning_loot_template", RBAC_PERM_COMMANDS_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL }, + { "smart_scripts", RBAC_PERM_COMMANDS_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL }, + { "spell_required", RBAC_PERM_COMMANDS_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL }, + { "spell_area", RBAC_PERM_COMMANDS_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL }, + { "spell_bonus_data", RBAC_PERM_COMMANDS_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL }, + { "spell_group", RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL }, + { "spell_learn_spell", RBAC_PERM_COMMANDS_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL }, + { "spell_loot_template", RBAC_PERM_COMMANDS_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL }, + { "spell_linked_spell", RBAC_PERM_COMMANDS_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL }, + { "spell_pet_auras", RBAC_PERM_COMMANDS_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL }, + { "spell_proc_event", RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL }, + { "spell_proc", RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL }, + { "spell_scripts", RBAC_PERM_COMMANDS_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL }, + { "spell_target_position", RBAC_PERM_COMMANDS_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL }, + { "spell_threats", RBAC_PERM_COMMANDS_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL }, + { "spell_group_stack_rules", RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL }, + { "trinity_string", RBAC_PERM_COMMANDS_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL }, + { "warden_action", RBAC_PERM_COMMANDS_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL }, + { "waypoint_scripts", RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL }, + { "waypoint_data", RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL }, + { "vehicle_accessory", RBAC_PERM_COMMANDS_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL }, + { "vehicle_template_accessory", RBAC_PERM_COMMANDS_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "reload", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", reloadCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "reload", RBAC_PERM_COMMANDS_RELOAD, true, NULL, "", reloadCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From 7183a355d2d894f2444559f837709f615f1a5b5a Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 14:33:27 +0200 Subject: Core/RBAC: Move reset commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_09_auth_misc.sql | 27 +++++++++++++++++++++++ sql/updates/world/2013_09_10_09_world_command.sql | 2 +- sql/updates/world/2013_09_10_10_world_command.sql | 2 +- sql/updates/world/2013_09_10_11_world_command.sql | 13 +++++++++++ src/server/game/Accounts/RBAC.h | 8 +++++++ src/server/scripts/Commands/cs_reset.cpp | 20 ++++++++--------- 6 files changed, 60 insertions(+), 12 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_09_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_11_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_09_auth_misc.sql b/sql/updates/auth/2013_09_10_09_auth_misc.sql new file mode 100644 index 00000000000..8e0e340bfec --- /dev/null +++ b/sql/updates/auth/2013_09_10_09_auth_misc.sql @@ -0,0 +1,27 @@ +/* cs_reset.cpp */ + +SET @id = 710; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+7; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'reset'), +(@id+1, 'reset achievements'), +(@id+2, 'reset honor'), +(@id+3, 'reset level'), +(@id+4, 'reset spells'), +(@id+5, 'reset stats'), +(@id+6, 'reset talents'), +(@id+7, 'reset all'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+7; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(4, @id+0), +(4, @id+1), +(4, @id+2), +(4, @id+3), +(4, @id+4), +(4, @id+5), +(4, @id+6), +(4, @id+7); diff --git a/sql/updates/world/2013_09_10_09_world_command.sql b/sql/updates/world/2013_09_10_09_world_command.sql index 6523202aa24..6f4070ed588 100644 --- a/sql/updates/world/2013_09_10_09_world_command.sql +++ b/sql/updates/world/2013_09_10_09_world_command.sql @@ -1,4 +1,4 @@ -/* cs_npc.cpp */ +/* cs_quest.cpp */ SET @id = 602; diff --git a/sql/updates/world/2013_09_10_10_world_command.sql b/sql/updates/world/2013_09_10_10_world_command.sql index 4249ff1ad5b..f7c74f01537 100644 --- a/sql/updates/world/2013_09_10_10_world_command.sql +++ b/sql/updates/world/2013_09_10_10_world_command.sql @@ -1,4 +1,4 @@ -/* cs_npc.cpp */ +/* cs_reload.cpp */ SET @id = 607; diff --git a/sql/updates/world/2013_09_10_11_world_command.sql b/sql/updates/world/2013_09_10_11_world_command.sql new file mode 100644 index 00000000000..b6e1ca651c2 --- /dev/null +++ b/sql/updates/world/2013_09_10_11_world_command.sql @@ -0,0 +1,13 @@ +/* cs_reset.cpp */ + +SET @id = 710; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'reload'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'reload achievements'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'reload honor'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'reload level'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'reload spells'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'reload stats'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'reload talents'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'reload all'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 6d6e483a874..d6d778df40c 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -609,6 +609,14 @@ enum RBACPermissions RBAC_PERM_COMMANDS_RELOAD_WARDEN_ACTION = 707, RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_DATA = 708, RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_SCRIPTS = 709, + RBAC_PERM_COMMAND_RESET = 710, + RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS = 711, + RBAC_PERM_COMMAND_RESET_HONOR = 712, + RBAC_PERM_COMMAND_RESET_LEVEL = 713, + RBAC_PERM_COMMAND_RESET_SPELLS = 714, + RBAC_PERM_COMMAND_RESET_STATS = 715, + RBAC_PERM_COMMAND_RESET_TALENTS = 716, + RBAC_PERM_COMMAND_RESET_ALL = 717, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index 3c95ceae4be..9b0b19bc51c 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -39,19 +39,19 @@ public: { static ChatCommand resetCommandTable[] = { - { "achievements", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetAchievementsCommand, "", NULL }, - { "honor", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetHonorCommand, "", NULL }, - { "level", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetLevelCommand, "", NULL }, - { "spells", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetSpellsCommand, "", NULL }, - { "stats", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetStatsCommand, "", NULL }, - { "talents", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetTalentsCommand, "", NULL }, - { "all", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetAllCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "achievements", RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS, true, &HandleResetAchievementsCommand, "", NULL }, + { "honor", RBAC_PERM_COMMAND_RESET_HONOR, true, &HandleResetHonorCommand, "", NULL }, + { "level", RBAC_PERM_COMMAND_RESET_LEVEL, true, &HandleResetLevelCommand, "", NULL }, + { "spells", RBAC_PERM_COMMAND_RESET_SPELLS, true, &HandleResetSpellsCommand, "", NULL }, + { "stats", RBAC_PERM_COMMAND_RESET_STATS, true, &HandleResetStatsCommand, "", NULL }, + { "talents", RBAC_PERM_COMMAND_RESET_TALENTS, true, &HandleResetTalentsCommand, "", NULL }, + { "all", RBAC_PERM_COMMAND_RESET_ALL, true, &HandleResetAllCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "reset", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", resetCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "reset", RBAC_PERM_COMMAND_RESET, true, NULL, "", resetCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From abbc6b2760a0f8117761e303c999f375c9ab4317 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 14:57:01 +0200 Subject: Core/RBAC: Move server commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_10_auth_misc.sql | 46 + sql/updates/world/2013_09_10_11_world_command.sql | 16 +- sql/updates/world/2013_09_10_12_world_command.sql | 24 + src/server/game/Accounts/RBAC.h | 1965 +++++++++++---------- src/server/scripts/Commands/cs_server.cpp | 60 +- 5 files changed, 1100 insertions(+), 1011 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_10_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_12_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_10_auth_misc.sql b/sql/updates/auth/2013_09_10_10_auth_misc.sql new file mode 100644 index 00000000000..a0587f75bf4 --- /dev/null +++ b/sql/updates/auth/2013_09_10_10_auth_misc.sql @@ -0,0 +1,46 @@ +/* cs_server.cpp */ + +SET @id = 718; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+18; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'server'), +(@id+1, 'server corpses'), +(@id+2, 'server exit'), +(@id+3, 'server idlerestart'), +(@id+4, 'server idlerestart cancel'), +(@id+5, 'server idleshutdown'), +(@id+6, 'server idleshutdown cancel'), +(@id+7, 'server info'), +(@id+8, 'server plimit'), +(@id+9, 'server restart'), +(@id+10, 'server restart cancel'), +(@id+11, 'server set'), +(@id+12, 'server set closed'), +(@id+13, 'server set difftime'), +(@id+14, 'server set loglevel'), +(@id+15, 'server set motd'), +(@id+16, 'server shutdown'), +(@id+17, 'server shutdown cancel'), +(@id+18, 'server motd'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+18; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(4, @id+0), +(4, @id+1), +(4, @id+3), +(4, @id+4), +(4, @id+5), +(4, @id+6), +(4, @id+7), +(4, @id+8), +(4, @id+9), +(4, @id+10), +(4, @id+11), +(4, @id+12), +(4, @id+15), +(4, @id+16), +(4, @id+17), +(4, @id+18); diff --git a/sql/updates/world/2013_09_10_11_world_command.sql b/sql/updates/world/2013_09_10_11_world_command.sql index b6e1ca651c2..3a0dc18e804 100644 --- a/sql/updates/world/2013_09_10_11_world_command.sql +++ b/sql/updates/world/2013_09_10_11_world_command.sql @@ -3,11 +3,11 @@ SET @id = 710; -- Update command table with new RBAC permissions -UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'reload'; -UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'reload achievements'; -UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'reload honor'; -UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'reload level'; -UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'reload spells'; -UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'reload stats'; -UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'reload talents'; -UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'reload all'; +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'reset'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'reset achievements'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'reset honor'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'reset level'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'reset spells'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'reset stats'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'reset talents'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'reset all'; diff --git a/sql/updates/world/2013_09_10_12_world_command.sql b/sql/updates/world/2013_09_10_12_world_command.sql new file mode 100644 index 00000000000..58542e5a10b --- /dev/null +++ b/sql/updates/world/2013_09_10_12_world_command.sql @@ -0,0 +1,24 @@ +/* cs_server.cpp */ + +SET @id = 718; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'server'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'server corpses'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'server exit'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'server idlerestart'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'server idlerestart cancel'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'server idleshutdown'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'server idleshutdown cancel'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'server info'; +UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'server plimit'; +UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'server restart'; +UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'server restart cancel'; +UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'server set'; +UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'server set closed'; +UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'server set difftime'; +UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'server set loglevel'; +UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'server set motd'; +UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'server shutdown'; +UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'server shutdown cancel'; +UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'server motd'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index d6d778df40c..6fa8f2c600a 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -1,973 +1,992 @@ -/* - * Copyright (C) 2008-2013 TrinityCore - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -/** -* @file RBAC.h -* @brief Role Based Access Control related classes definition -* -* This file contains all the classes and enums used to implement -* Role Based Access Control -* -* RBAC Rules: -* - Pemission: Defines an autorization to perform certain operation. -* - Role: Set of permissions. -* - Group: Set of roles. -* - An Account can have multiple groups, roles and permissions. -* - Account Groups can only be granted or revoked -* - Account Roles and Permissions can be granted, denied or revoked -* - Grant: Assignment of the object (role/permission) and allow it -* - Deny: Assignment of the object (role/permission) and deny it -* - Revoke: Removal of the object (role/permission) no matter if it was granted or denied -* - Global Permissions are computed as: -* Group Grants + Role Grants + User Grans - Role Grants - User Grants -* - Groups, Roles and Permissions can be assigned by realm -*/ - -#ifndef _RBAC_H -#define _RBAC_H - -#include "Define.h" -#include -#include -#include -#include - -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_CONSOLE_COMMANDS = 12, // Not pressent in DB - RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES = 13, - RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_TEAMMASK = 14, - RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_CLASSMASK = 15, - RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK = 16, - RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RESERVEDNAME = 17, - RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_HEROIC_CHARACTER = 18, - RBAC_PERM_SKIP_CHECK_CHAT_CHANNEL_REQ = 19, - RBAC_PERM_SKIP_CHECK_DISABLE_MAP = 20, - RBAC_PERM_SKIP_CHECK_MORE_TALENTS_THAN_ALLOWED = 21, - RBAC_PERM_SKIP_CHECK_CHAT_SPAM = 22, - RBAC_PERM_SKIP_CHECK_OVERSPEED_PING = 23, - RBAC_PERM_TWO_SIDE_CHARACTER_CREATION = 24, - RBAC_PERM_TWO_SIDE_INTERACTION_CHAT = 25, - RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL = 26, - RBAC_PERM_TWO_SIDE_INTERACTION_MAIL = 27, - RBAC_PERM_TWO_SIDE_WHO_LIST = 28, - RBAC_PERM_TWO_SIDE_ADD_FRIEND = 29, - 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_WHO_SEE_ALL_SEC_LEVELS = 35, - RBAC_PERM_CAN_FILTER_WHISPERS = 36, - RBAC_PERM_CHAT_USE_STAFF_BADGE = 37, - RBAC_PERM_RESURRECT_WITH_FULL_HPS = 38, - RBAC_PERM_RESTORE_SAVED_GM_STATE = 39, - RBAC_PERM_ALLOW_GM_FRIEND = 40, - RBAC_PERM_USE_START_GM_LEVEL = 41, - RBAC_PERM_OPCODE_WORLD_TELEPORT = 42, - RBAC_PERM_OPCODE_WHOIS = 43, - RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE = 44, - RBAC_PERM_SILENTLY_JOIN_CHANNEL = 45, - RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR = 46, - RBAC_PERM_CHECK_FOR_LOWER_SECURITY = 47, - RBAC_PERM_COMMANDS_PINFO_CHECK_PERSONAL_DATA = 48, - RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE = 49, - RBAC_PERM_MAY_CHECK_OWN_EMAIL = 50, - // Leave some space for core permissions - RBAC_PERM_COMMAND_RBAC = 200, - RBAC_PERM_COMMAND_RBAC_ACC = 201, - RBAC_PERM_COMMAND_RBAC_ACC_GROUP = 202, - RBAC_PERM_COMMAND_RBAC_ACC_GROUP_ADD = 203, - RBAC_PERM_COMMAND_RBAC_ACC_GROUP_DEL = 204, - RBAC_PERM_COMMAND_RBAC_ACC_ROLE = 205, - RBAC_PERM_COMMAND_RBAC_ACC_ROLE_GRANT = 206, - RBAC_PERM_COMMAND_RBAC_ACC_ROLE_DENY = 207, - RBAC_PERM_COMMAND_RBAC_ACC_ROLE_REVOKE = 208, - RBAC_PERM_COMMAND_RBAC_ACC_PERM = 209, - RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT = 210, - RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY = 211, - RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE = 212, - RBAC_PERM_COMMAND_RBAC_LIST = 213, - RBAC_PERM_COMMAND_RBAC_LIST_GROUPS = 214, - RBAC_PERM_COMMAND_RBAC_LIST_ROLES = 215, - RBAC_PERM_COMMAND_RBAC_LIST_PERMS = 216, - RBAC_PERM_COMMAND_ACCOUNT = 217, - RBAC_PERM_COMMAND_ACCOUNT_ADDON = 218, - RBAC_PERM_COMMAND_ACCOUNT_CREATE = 219, - RBAC_PERM_COMMAND_ACCOUNT_DELETE = 220, - RBAC_PERM_COMMAND_ACCOUNT_LOCK = 221, - RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY = 222, - RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP = 223, - RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST = 224, - RBAC_PERM_COMMAND_ACCOUNT_PASSWORD = 225, - RBAC_PERM_COMMAND_ACCOUNT_SET = 226, - RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON = 227, - RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL = 228, - RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD = 229, - RBAC_PERM_COMMAND_ACHIEVEMENT = 230, - RBAC_PERM_COMMAND_ACHIEVEMENT_ADD = 231, - RBAC_PERM_COMMAND_ARENA = 232, - RBAC_PERM_COMMAND_ARENA_CAPTAIN = 233, - RBAC_PERM_COMMAND_ARENA_CREATE = 234, - RBAC_PERM_COMMAND_ARENA_DISBAND = 235, - RBAC_PERM_COMMAND_ARENA_INFO = 236, - RBAC_PERM_COMMAND_ARENA_LOOKUP = 237, - RBAC_PERM_COMMAND_ARENA_RENAME = 238, - RBAC_PERM_COMMAND_BAN = 239, - RBAC_PERM_COMMAND_BAN_ACCOUNT = 240, - RBAC_PERM_COMMAND_BAN_CHARACTER = 241, - RBAC_PERM_COMMAND_BAN_IP = 242, - RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT = 243, - RBAC_PERM_COMMAND_BANINFO = 244, - RBAC_PERM_COMMAND_BANINFO_ACCOUNT = 245, - RBAC_PERM_COMMAND_BANINFO_CHARACTER = 246, - RBAC_PERM_COMMAND_BANINFO_IP = 247, - RBAC_PERM_COMMAND_BANLIST = 248, - RBAC_PERM_COMMAND_BANLIST_ACCOUNT = 249, - RBAC_PERM_COMMAND_BANLIST_CHARACTER = 250, - RBAC_PERM_COMMAND_BANLIST_IP = 251, - RBAC_PERM_COMMAND_UNBAN = 252, - RBAC_PERM_COMMAND_UNBAN_ACCOUNT = 253, - RBAC_PERM_COMMAND_UNBAN_CHARACTER = 254, - RBAC_PERM_COMMAND_UNBAN_IP = 255, - RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT = 256, - RBAC_PERM_COMMAND_BF = 257, - RBAC_PERM_COMMAND_BF_START = 258, - RBAC_PERM_COMMAND_BF_STOP = 259, - RBAC_PERM_COMMAND_BF_SWITCH = 260, - RBAC_PERM_COMMAND_BF_TIMER = 261, - RBAC_PERM_COMMAND_BF_ENABLE = 262, - RBAC_PERM_COMMAND_ACCOUNT_EMAIL = 263, - RBAC_PERM_COMMAND_ACCOUNT_SET_SEC = 264, - RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_EMAIL = 265, - RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_REGMAIL = 266, - RBAC_PERM_COMMAND_CAST = 267, - RBAC_PERM_COMMAND_CAST_BACK = 268, - RBAC_PERM_COMMAND_CAST_DIST = 269, - RBAC_PERM_COMMAND_CAST_SELF = 270, - RBAC_PERM_COMMAND_CAST_TARGET = 271, - RBAC_PERM_COMMAND_CAST_DEST = 272, - RBAC_PERM_COMMAND_CHARACTER = 273, - RBAC_PERM_COMMAND_CHARACTER_CUSTOMIZE = 274, - RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION = 275, - RBAC_PERM_COMMAND_CHARACTER_CHANGERACE = 276, - RBAC_PERM_COMMAND_CHARACTER_DELETED = 277, - RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE = 278, - RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST = 279, - RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE = 280, - RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD = 281, - RBAC_PERM_COMMAND_CHARACTER_ERASE = 282, - RBAC_PERM_COMMAND_CHARACTER_LEVEL = 283, - RBAC_PERM_COMMAND_CHARACTER_RENAME = 284, - RBAC_PERM_COMMAND_CHARACTER_REPUTATION = 285, - RBAC_PERM_COMMAND_CHARACTER_TITLES = 286, - RBAC_PERM_COMMAND_LEVELUP = 287, - RBAC_PERM_COMMAND_PDUMP = 288, - RBAC_PERM_COMMAND_PDUMP_LOAD = 289, - RBAC_PERM_COMMAND_PDUMP_WRITE = 290, - RBAC_PERM_COMMAND_CHEAT = 291, - RBAC_PERM_COMMAND_CHEAT_CASTTIME = 292, - RBAC_PERM_COMMAND_CHEAT_COOLDOWN = 293, - RBAC_PERM_COMMAND_CHEAT_EXPLORE = 294, - RBAC_PERM_COMMAND_CHEAT_GOD = 295, - RBAC_PERM_COMMAND_CHEAT_POWER = 296, - RBAC_PERM_COMMAND_CHEAT_STATUS = 297, - RBAC_PERM_COMMAND_CHEAT_TAXI = 298, - RBAC_PERM_COMMAND_CHEAT_WATERWALK = 299, - RBAC_PERM_COMMAND_DEBUG = 300, - RBAC_PERM_COMMAND_DEBUG_ANIM = 301, - RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS = 302, - RBAC_PERM_COMMAND_DEBUG_ARENA = 303, - RBAC_PERM_COMMAND_DEBUG_BG = 304, - RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE = 305, - RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE = 306, - RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE = 307, - RBAC_PERM_COMMAND_DEBUG_GETVALUE = 308, - RBAC_PERM_COMMAND_DEBUG_HOSTIL = 309, - RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE = 310, - RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT = 311, - RBAC_PERM_COMMAND_DEBUG_LOS = 312, - RBAC_PERM_COMMAND_DEBUG_MOD32VALUE = 313, - RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS = 314, - RBAC_PERM_COMMAND_DEBUG_PLAY = 315, - RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC = 316, - RBAC_PERM_COMMAND_DEBUG_PLAY_MOVIE = 317, - RBAC_PERM_COMMAND_DEBUG_PLAY_SOUND = 318, - RBAC_PERM_COMMAND_DEBUG_SEND = 319, - RBAC_PERM_COMMAND_DEBUG_SEND_BUYERROR = 320, - RBAC_PERM_COMMAND_DEBUG_SEND_CHANNELNOTIFY = 321, - RBAC_PERM_COMMAND_DEBUG_SEND_CHATMESSAGE = 322, - RBAC_PERM_COMMAND_DEBUG_SEND_EQUIPERROR = 323, - RBAC_PERM_COMMAND_DEBUG_SEND_LARGEPACKET = 324, - RBAC_PERM_COMMAND_DEBUG_SEND_OPCODE = 325, - RBAC_PERM_COMMAND_DEBUG_SEND_QINVALIDMSG = 326, - RBAC_PERM_COMMAND_DEBUG_SEND_QPARTYMSG = 327, - RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR = 328, - RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT = 329, - RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL = 330, - RBAC_PERM_COMMAND_DEBUG_SETAURASTATE = 331, - RBAC_PERM_COMMAND_DEBUG_SETBIT = 332, - RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE = 333, - RBAC_PERM_COMMAND_DEBUG_SETVALUE = 334, - RBAC_PERM_COMMAND_DEBUG_SETVID = 335, - RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE = 336, - RBAC_PERM_COMMAND_DEBUG_THREAT = 337, - RBAC_PERM_COMMAND_DEBUG_UPDATE = 338, - RBAC_PERM_COMMAND_DEBUG_UWS = 339, - RBAC_PERM_COMMAND_WPGPS = 340, - RBAC_PERM_COMMAND_DESERTER = 341, - RBAC_PERM_COMMAND_DESERTER_BG = 342, - RBAC_PERM_COMMAND_DESERTER_BG_ADD = 343, - RBAC_PERM_COMMAND_DESERTER_BG_REMOVE = 344, - RBAC_PERM_COMMAND_DESERTER_INSTANCE = 345, - RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD = 346, - RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE = 347, - RBAC_PERM_COMMAND_DISABLE = 348, - RBAC_PERM_COMMAND_DISABLE_ADD = 349, - RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA = 350, - RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND = 351, - RBAC_PERM_COMMAND_DISABLE_ADD_MAP = 352, - RBAC_PERM_COMMAND_DISABLE_ADD_MMAP = 353, - RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP = 354, - RBAC_PERM_COMMAND_DISABLE_ADD_QUEST = 355, - RBAC_PERM_COMMAND_DISABLE_ADD_SPELL = 356, - RBAC_PERM_COMMAND_DISABLE_ADD_VMAP = 357, - RBAC_PERM_COMMAND_DISABLE_REMOVE = 358, - RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA = 359, - RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND = 360, - RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP = 361, - RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP = 362, - RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP = 363, - RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST = 364, - RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL = 365, - RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP = 366, - RBAC_PERM_COMMAND_EVENT = 367, - RBAC_PERM_COMMAND_EVENT_ACTIVELIST = 368, - RBAC_PERM_COMMAND_EVENT_START = 369, - RBAC_PERM_COMMAND_EVENT_STOP = 370, - RBAC_PERM_COMMAND_GM = 371, - RBAC_PERM_COMMAND_GM_CHAT = 372, - RBAC_PERM_COMMAND_GM_FLY = 373, - RBAC_PERM_COMMAND_GM_INGAME = 374, - RBAC_PERM_COMMAND_GM_LIST = 375, - RBAC_PERM_COMMAND_GM_VISIBLE = 376, - RBAC_PERM_COMMAND_GO = 377, - RBAC_PERM_COMMAND_GO_CREATURE = 378, - RBAC_PERM_COMMAND_GO_GRAVEYARD = 379, - RBAC_PERM_COMMAND_GO_GRID = 380, - RBAC_PERM_COMMAND_GO_OBJECT = 381, - RBAC_PERM_COMMAND_GO_TAXINODE = 382, - RBAC_PERM_COMMAND_GO_TICKET = 383, - RBAC_PERM_COMMAND_GO_TRIGGER = 384, - RBAC_PERM_COMMAND_GO_XYZ = 385, - RBAC_PERM_COMMAND_GO_ZONEXY = 386, - RBAC_PERM_COMMAND_GOBJECT = 387, - RBAC_PERM_COMMAND_GOBJECT_ACTIVATE = 388, - RBAC_PERM_COMMAND_GOBJECT_ADD = 389, - RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP = 390, - RBAC_PERM_COMMAND_GOBJECT_DELETE = 391, - RBAC_PERM_COMMAND_GOBJECT_INFO = 392, - RBAC_PERM_COMMAND_GOBJECT_MOVE = 393, - RBAC_PERM_COMMAND_GOBJECT_NEAR = 394, - RBAC_PERM_COMMAND_GOBJECT_SET = 395, - RBAC_PERM_COMMAND_GOBJECT_SET_PHASE = 396, - RBAC_PERM_COMMAND_GOBJECT_SET_STATE = 397, - RBAC_PERM_COMMAND_GOBJECT_TARGET = 398, - RBAC_PERM_COMMAND_GOBJECT_TURN = 399, - // 400 - reuse - RBAC_PERM_COMMAND_GUILD = 401, - RBAC_PERM_COMMAND_GUILD_CREATE = 402, - RBAC_PERM_COMMAND_GUILD_DELETE = 403, - RBAC_PERM_COMMAND_GUILD_INVITE = 404, - RBAC_PERM_COMMAND_GUILD_UNINVITE = 405, - RBAC_PERM_COMMAND_GUILD_RANK = 406, - RBAC_PERM_COMMAND_GUILD_RENAME = 407, - RBAC_PERM_COMMAND_HONOR = 408, - RBAC_PERM_COMMAND_HONOR_ADD = 409, - RBAC_PERM_COMMAND_HONOR_ADD_KILL = 410, - RBAC_PERM_COMMAND_HONOR_UPDATE = 411, - RBAC_PERM_COMMAND_INSTANCE = 412, - RBAC_PERM_COMMAND_INSTANCE_LISTBINDS = 413, - RBAC_PERM_COMMAND_INSTANCE_UNBIND = 414, - RBAC_PERM_COMMAND_INSTANCE_STATS = 415, - RBAC_PERM_COMMAND_INSTANCE_SAVEDATA = 416, - RBAC_PERM_COMMAND_LEARN = 417, - RBAC_PERM_COMMAND_LEARN_ALL = 418, - RBAC_PERM_COMMAND_LEARN_ALL_MY = 419, - RBAC_PERM_COMMAND_LEARN_ALL_MY_CLASS = 420, - RBAC_PERM_COMMAND_LEARN_ALL_MY_PETTALENTS = 421, - RBAC_PERM_COMMAND_LEARN_ALL_MY_SPELLS = 422, - RBAC_PERM_COMMAND_LEARN_ALL_MY_TALENTS = 423, - RBAC_PERM_COMMAND_LEARN_ALL_GM = 424, - RBAC_PERM_COMMAND_LEARN_ALL_CRAFTS = 425, - RBAC_PERM_COMMAND_LEARN_ALL_DEFAULT = 426, - RBAC_PERM_COMMAND_LEARN_ALL_LANG = 427, - RBAC_PERM_COMMAND_LEARN_ALL_RECIPES = 428, - RBAC_PERM_COMMAND_UNLEARN = 429, - RBAC_PERM_COMMAND_LFG = 430, - RBAC_PERM_COMMAND_LFG_PLAYER = 431, - RBAC_PERM_COMMAND_LFG_GROUP = 432, - RBAC_PERM_COMMAND_LFG_QUEUE = 433, - RBAC_PERM_COMMAND_LFG_CLEAN = 434, - RBAC_PERM_COMMAND_LFG_OPTIONS = 435, - RBAC_PERM_COMMAND_LIST = 436, - RBAC_PERM_COMMAND_LIST_CREATURE = 437, - RBAC_PERM_COMMAND_LIST_ITEM = 438, - RBAC_PERM_COMMAND_LIST_OBJECT = 439, - RBAC_PERM_COMMAND_LIST_AURAS = 440, - RBAC_PERM_COMMAND_LIST_MAIL = 441, - RBAC_PERM_COMMAND_LOOKUP = 442, - RBAC_PERM_COMMAND_LOOKUP_AREA = 443, - RBAC_PERM_COMMAND_LOOKUP_CREATURE = 444, - RBAC_PERM_COMMAND_LOOKUP_EVENT = 445, - RBAC_PERM_COMMAND_LOOKUP_FACTION = 446, - RBAC_PERM_COMMAND_LOOKUP_ITEM = 447, - RBAC_PERM_COMMAND_LOOKUP_ITEMSET = 448, - RBAC_PERM_COMMAND_LOOKUP_OBJECT = 449, - RBAC_PERM_COMMAND_LOOKUP_QUEST = 450, - RBAC_PERM_COMMAND_LOOKUP_PLAYER = 451, - RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP = 452, - RBAC_PERM_COMMAND_LOOKUP_PLAYER_ACCOUNT = 453, - RBAC_PERM_COMMAND_LOOKUP_PLAYER_EMAIL = 454, - RBAC_PERM_COMMAND_LOOKUP_SKILL = 455, - RBAC_PERM_COMMAND_LOOKUP_SPELL = 456, - RBAC_PERM_COMMAND_LOOKUP_SPELL_ID = 457, - RBAC_PERM_COMMAND_LOOKUP_TAXINODE = 458, - RBAC_PERM_COMMAND_LOOKUP_TELE = 459, - RBAC_PERM_COMMAND_LOOKUP_TITLE = 460, - RBAC_PERM_COMMAND_LOOKUP_MAP = 461, - RBAC_PERM_COMMAND_ANNOUNCE = 462, - RBAC_PERM_COMMAND_CHANNEL = 463, - RBAC_PERM_COMMAND_CHANNEL_SET = 464, - RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP = 465, - RBAC_PERM_COMMAND_GMANNOUNCE = 466, - RBAC_PERM_COMMAND_GMNAMEANNOUNCE = 467, - RBAC_PERM_COMMAND_GMNOTIFY = 468, - RBAC_PERM_COMMAND_NAMEANNOUNCE = 469, - RBAC_PERM_COMMAND_NOTIFY = 470, - RBAC_PERM_COMMAND_WHISPERS = 471, - RBAC_PERM_COMMAND_GROUP = 472, - RBAC_PERM_COMMAND_GROUP_LEADER = 473, - RBAC_PERM_COMMAND_GROUP_DISBAND = 474, - RBAC_PERM_COMMAND_GROUP_REMOVE = 475, - RBAC_PERM_COMMAND_GROUP_JOIN = 476, - RBAC_PERM_COMMAND_GROUP_LIST = 477, - RBAC_PERM_COMMAND_GROUP_SUMMON = 478, - RBAC_PERM_COMMAND_PET = 479, - RBAC_PERM_COMMAND_PET_CREATE = 480, - RBAC_PERM_COMMAND_PET_LEARN = 481, - RBAC_PERM_COMMAND_PET_UNLEARN = 482, - RBAC_PERM_COMMAND_SEND = 483, - RBAC_PERM_COMMAND_SEND_ITEMS = 484, - RBAC_PERM_COMMAND_SEND_MAIL = 485, - RBAC_PERM_COMMAND_SEND_MESSAGE = 486, - RBAC_PERM_COMMAND_SEND_MONEY = 487, - RBAC_PERM_COMMAND_ADDITEM = 488, - RBAC_PERM_COMMAND_ADDITEMSET = 489, - RBAC_PERM_COMMAND_APPEAR = 490, - RBAC_PERM_COMMAND_AURA = 491, - RBAC_PERM_COMMAND_BANK = 492, - RBAC_PERM_COMMAND_BINDSIGHT = 493, - RBAC_PERM_COMMAND_COMBATSTOP = 494, - RBAC_PERM_COMMAND_COMETOME = 495, - RBAC_PERM_COMMAND_COMMANDS = 496, - RBAC_PERM_COMMAND_COOLDOWN = 497, - RBAC_PERM_COMMAND_DAMAGE = 498, - RBAC_PERM_COMMAND_DEV = 499, - RBAC_PERM_COMMAND_DIE = 500, - RBAC_PERM_COMMAND_DISMOUNT = 501, - RBAC_PERM_COMMAND_DISTANCE = 502, - RBAC_PERM_COMMAND_FLUSHARENAPOINTS = 503, - RBAC_PERM_COMMAND_FREEZE = 504, - RBAC_PERM_COMMAND_GPS = 505, - RBAC_PERM_COMMAND_GUID = 506, - RBAC_PERM_COMMAND_HELP = 507, - RBAC_PERM_COMMAND_HIDEAREA = 508, - RBAC_PERM_COMMAND_ITEMMOVE = 509, - RBAC_PERM_COMMAND_KICK = 510, - RBAC_PERM_COMMAND_LINKGRAVE = 511, - RBAC_PERM_COMMAND_LISTFREEZE = 512, - RBAC_PERM_COMMAND_MAXSKILL = 513, - RBAC_PERM_COMMAND_MOVEGENS = 514, - RBAC_PERM_COMMAND_MUTE = 515, - RBAC_PERM_COMMAND_NEARGRAVE = 516, - RBAC_PERM_COMMAND_PINFO = 517, - RBAC_PERM_COMMAND_PLAYALL = 518, - RBAC_PERM_COMMAND_POSSESS = 519, - RBAC_PERM_COMMAND_RECALL = 520, - RBAC_PERM_COMMAND_REPAIRITEMS = 521, - RBAC_PERM_COMMAND_RESPAWN = 522, - RBAC_PERM_COMMAND_REVIVE = 523, - RBAC_PERM_COMMAND_SAVE = 524, - RBAC_PERM_COMMAND_SAVEALL = 525, - RBAC_PERM_COMMAND_SETSKILL = 526, - RBAC_PERM_COMMAND_SHOWAREA = 527, - RBAC_PERM_COMMAND_SUMMON = 528, - RBAC_PERM_COMMAND_UNAURA = 529, - RBAC_PERM_COMMAND_UNBINDSIGHT = 530, - RBAC_PERM_COMMAND_UNFREEZE = 531, - RBAC_PERM_COMMAND_UNMUTE = 532, - RBAC_PERM_COMMAND_UNPOSSESS = 533, - RBAC_PERM_COMMAND_UNSTUCK = 534, - RBAC_PERM_COMMAND_WCHANGE = 535, - RBAC_PERM_COMMAND_MMAP = 536, - RBAC_PERM_COMMAND_MMAP_LOADEDTILES = 537, - RBAC_PERM_COMMAND_MMAP_LOC = 538, - RBAC_PERM_COMMAND_MMAP_PATH = 539, - RBAC_PERM_COMMAND_MMAP_STATS = 540, - RBAC_PERM_COMMAND_MMAP_TESTAREA = 541, - RBAC_PERM_COMMAND_MORPH = 542, - RBAC_PERM_COMMAND_DEMORPH = 543, - RBAC_PERM_COMMAND_MODIFY = 544, - RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS = 545, - RBAC_PERM_COMMAND_MODIFY_BIT = 546, - RBAC_PERM_COMMAND_MODIFY_DRUNK = 547, - RBAC_PERM_COMMAND_MODIFY_ENERGY = 548, - RBAC_PERM_COMMAND_MODIFY_FACTION = 549, - RBAC_PERM_COMMAND_MODIFY_GENDER = 550, - RBAC_PERM_COMMAND_MODIFY_HONOR = 551, - RBAC_PERM_COMMAND_MODIFY_HP = 552, - RBAC_PERM_COMMAND_MODIFY_MANA = 553, - RBAC_PERM_COMMAND_MODIFY_MONEY = 554, - RBAC_PERM_COMMAND_MODIFY_MOUNT = 555, - RBAC_PERM_COMMAND_MODIFY_PHASE = 556, - RBAC_PERM_COMMAND_MODIFY_RAGE = 557, - RBAC_PERM_COMMAND_MODIFY_REPUTATION = 558, - RBAC_PERM_COMMAND_MODIFY_RUNICPOWER = 559, - RBAC_PERM_COMMAND_MODIFY_SCALE = 560, - RBAC_PERM_COMMAND_MODIFY_SPEED = 561, - RBAC_PERM_COMMAND_MODIFY_SPEED_ALL = 562, - RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK = 563, - RBAC_PERM_COMMAND_MODIFY_SPEED_FLY = 564, - RBAC_PERM_COMMAND_MODIFY_SPEED_WALK = 565, - RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM = 566, - RBAC_PERM_COMMAND_MODIFY_SPELL = 567, - RBAC_PERM_COMMAND_MODIFY_STANDSTATE = 568, - RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS = 569, - RBAC_PERM_COMMAND_NPC = 570, - RBAC_PERM_COMMAND_NPC_ADD = 571, - RBAC_PERM_COMMAND_NPC_ADD_FORMATION = 572, - RBAC_PERM_COMMAND_NPC_ADD_ITEM = 573, - RBAC_PERM_COMMAND_NPC_ADD_MOVE = 574, - RBAC_PERM_COMMAND_NPC_ADD_TEMP = 575, - RBAC_PERM_COMMAND_NPC_DELETE = 576, - RBAC_PERM_COMMAND_NPC_DELETE_ITEM = 577, - RBAC_PERM_COMMAND_NPC_FOLLOW = 578, - RBAC_PERM_COMMAND_NPC_FOLLOW_STOP = 579, - RBAC_PERM_COMMAND_NPC_SET = 580, - RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE = 581, - RBAC_PERM_COMMAND_NPC_SET_ENTRY = 582, - RBAC_PERM_COMMAND_NPC_SET_FACTIONID = 583, - RBAC_PERM_COMMAND_NPC_SET_FLAG = 584, - RBAC_PERM_COMMAND_NPC_SET_LEVEL = 585, - RBAC_PERM_COMMAND_NPC_SET_LINK = 586, - RBAC_PERM_COMMAND_NPC_SET_MODEL = 587, - RBAC_PERM_COMMAND_NPC_SET_MOVETYPE = 588, - RBAC_PERM_COMMAND_NPC_SET_PHASE = 589, - RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST = 590, - RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME = 591, - RBAC_PERM_COMMAND_NPC_SET_DATA = 592, - RBAC_PERM_COMMAND_NPC_INFO = 593, - RBAC_PERM_COMMAND_NPC_NEAR = 594, - RBAC_PERM_COMMAND_NPC_MOVE = 595, - RBAC_PERM_COMMAND_NPC_PLAYEMOTE = 596, - RBAC_PERM_COMMAND_NPC_SAY = 597, - RBAC_PERM_COMMAND_NPC_TEXTEMOTE = 598, - RBAC_PERM_COMMAND_NPC_WHISPER = 599, - RBAC_PERM_COMMAND_NPC_YELL = 600, - RBAC_PERM_COMMAND_NPC_TAME = 601, - RBAC_PERM_COMMAND_QUEST = 602, - RBAC_PERM_COMMAND_QUEST_ADD = 603, - RBAC_PERM_COMMAND_QUEST_COMPLETE = 604, - RBAC_PERM_COMMAND_QUEST_REMOVE = 605, - RBAC_PERM_COMMAND_QUEST_REWARD = 606, - RBAC_PERM_COMMANDS_RELOAD = 607, - RBAC_PERM_COMMANDS_RELOAD_ACCESS_REQUIREMENT = 608, - RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_CRITERIA_DATA = 609, - RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_REWARD = 610, - RBAC_PERM_COMMANDS_RELOAD_ALL = 611, - RBAC_PERM_COMMANDS_RELOAD_ALL_ACHIEVEMENT = 612, - RBAC_PERM_COMMANDS_RELOAD_ALL_AREA = 613, - RBAC_PERM_COMMANDS_RELOAD_ALL_EVENTAI = 614, - RBAC_PERM_COMMANDS_RELOAD_ALL_GOSSIP = 615, - RBAC_PERM_COMMANDS_RELOAD_ALL_ITEM = 616, - RBAC_PERM_COMMANDS_RELOAD_ALL_LOCALES = 617, - RBAC_PERM_COMMANDS_RELOAD_ALL_LOOT = 618, - RBAC_PERM_COMMANDS_RELOAD_ALL_NPC = 619, - RBAC_PERM_COMMANDS_RELOAD_ALL_QUEST = 620, - RBAC_PERM_COMMANDS_RELOAD_ALL_SCRIPTS = 621, - RBAC_PERM_COMMANDS_RELOAD_ALL_SPELL = 622, - RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_INVOLVEDRELATION = 623, - RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TAVERN = 624, - RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TELEPORT = 625, - RBAC_PERM_COMMANDS_RELOAD_AUCTIONS = 626, - RBAC_PERM_COMMANDS_RELOAD_AUTOBROADCAST = 627, - RBAC_PERM_COMMANDS_RELOAD_COMMAND = 628, - RBAC_PERM_COMMANDS_RELOAD_CONDITIONS = 629, - RBAC_PERM_COMMANDS_RELOAD_CONFIG = 630, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_SCRIPTS = 631, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_TEXTS = 632, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_LINKED_RESPAWN = 633, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_LOOT_TEMPLATE = 634, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_ONKILL_REPUTATION = 635, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTENDER = 636, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTSTARTER = 637, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_SUMMON_GROUPS = 638, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEMPLATE = 639, - RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEXT = 640, - RBAC_PERM_COMMANDS_RELOAD_DISABLES = 641, - RBAC_PERM_COMMANDS_RELOAD_DISENCHANT_LOOT_TEMPLATE = 642, - RBAC_PERM_COMMANDS_RELOAD_EVENT_SCRIPTS = 643, - RBAC_PERM_COMMANDS_RELOAD_FISHING_LOOT_TEMPLATE = 644, - RBAC_PERM_COMMANDS_RELOAD_GAME_GRAVEYARD_ZONE = 645, - RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTENDER = 646, - RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE = 647, - RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTSTARTER = 648, - RBAC_PERM_COMMANDS_RELOAD_GAME_TELE = 649, - RBAC_PERM_COMMANDS_RELOAD_GM_TICKETS = 650, - RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU = 651, - RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU_OPTION = 652, - RBAC_PERM_COMMANDS_RELOAD_ITEM_ENCHANTMENT_TEMPLATE = 653, - RBAC_PERM_COMMANDS_RELOAD_ITEM_LOOT_TEMPLATE = 654, - RBAC_PERM_COMMANDS_RELOAD_ITEM_SET_NAMES = 655, - RBAC_PERM_COMMANDS_RELOAD_LFG_DUNGEON_REWARDS = 656, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_ACHIEVEMENT_REWARD = 657, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE = 658, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE_TEXT = 659, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_GAMEOBJECT = 660, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_GOSSIP_MENU_OPTION = 661, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM = 662, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM_SET_NAME = 663, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_NPC_TEXT = 664, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_PAGE_TEXT = 665, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_POINTS_OF_INTEREST = 666, - RBAC_PERM_COMMANDS_RELOAD_LOCALES_QUEST = 667, - RBAC_PERM_COMMANDS_RELOAD_MAIL_LEVEL_REWARD = 668, - RBAC_PERM_COMMANDS_RELOAD_MAIL_LOOT_TEMPLATE = 669, - RBAC_PERM_COMMANDS_RELOAD_MILLING_LOOT_TEMPLATE = 670, - RBAC_PERM_COMMANDS_RELOAD_NPC_SPELLCLICK_SPELLS = 671, - RBAC_PERM_COMMANDS_RELOAD_NPC_TRAINER = 672, - RBAC_PERM_COMMANDS_RELOAD_NPC_VENDOR = 673, - RBAC_PERM_COMMANDS_RELOAD_PAGE_TEXT = 674, - RBAC_PERM_COMMANDS_RELOAD_PICKPOCKETING_LOOT_TEMPLATE = 675, - RBAC_PERM_COMMANDS_RELOAD_POINTS_OF_INTEREST = 676, - RBAC_PERM_COMMANDS_RELOAD_PROSPECTING_LOOT_TEMPLATE = 677, - RBAC_PERM_COMMANDS_RELOAD_QUEST_POI = 678, - RBAC_PERM_COMMANDS_RELOAD_QUEST_TEMPLATE = 679, - RBAC_PERM_COMMANDS_RELOAD_RBAC = 680, - RBAC_PERM_COMMANDS_RELOAD_REFERENCE_LOOT_TEMPLATE = 681, - RBAC_PERM_COMMANDS_RELOAD_REPUTATION_REWARD_RATE = 682, - RBAC_PERM_COMMANDS_RELOAD_RESERVED_NAME = 683, - RBAC_PERM_COMMANDS_RELOAD_SKILL_DISCOVERY_TEMPLATE = 684, - RBAC_PERM_COMMANDS_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE = 685, - RBAC_PERM_COMMANDS_RELOAD_SKILL_FISHING_BASE_LEVEL = 686, - RBAC_PERM_COMMANDS_RELOAD_SKINNING_LOOT_TEMPLATE = 687, - RBAC_PERM_COMMANDS_RELOAD_SMART_SCRIPTS = 688, - RBAC_PERM_COMMANDS_RELOAD_SPELL_AREA = 689, - RBAC_PERM_COMMANDS_RELOAD_SPELL_BONUS_DATA = 690, - RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP = 691, - RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP_STACK_RULES = 692, - RBAC_PERM_COMMANDS_RELOAD_SPELL_LEARN_SPELL = 693, - RBAC_PERM_COMMANDS_RELOAD_SPELL_LINKED_SPELL = 694, - RBAC_PERM_COMMANDS_RELOAD_SPELL_LOOT_TEMPLATE = 695, - RBAC_PERM_COMMANDS_RELOAD_SPELL_PET_AURAS = 696, - RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC = 697, - RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC_EVENT = 698, - RBAC_PERM_COMMANDS_RELOAD_SPELL_REQUIRED = 699, - RBAC_PERM_COMMANDS_RELOAD_SPELL_SCRIPTS = 700, - RBAC_PERM_COMMANDS_RELOAD_SPELL_TARGET_POSITION = 701, - RBAC_PERM_COMMANDS_RELOAD_SPELL_THREATS = 702, - RBAC_PERM_COMMANDS_RELOAD_SPILLOVER_TEMPLATE = 703, - RBAC_PERM_COMMANDS_RELOAD_TRINITY_STRING = 704, - RBAC_PERM_COMMANDS_RELOAD_VEHICLE_ACCESORY = 705, - RBAC_PERM_COMMANDS_RELOAD_VEHICLE_TEMPLATE_ACCESSORY = 706, - RBAC_PERM_COMMANDS_RELOAD_WARDEN_ACTION = 707, - RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_DATA = 708, - RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_SCRIPTS = 709, - RBAC_PERM_COMMAND_RESET = 710, - RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS = 711, - RBAC_PERM_COMMAND_RESET_HONOR = 712, - RBAC_PERM_COMMAND_RESET_LEVEL = 713, - RBAC_PERM_COMMAND_RESET_SPELLS = 714, - RBAC_PERM_COMMAND_RESET_STATS = 715, - RBAC_PERM_COMMAND_RESET_TALENTS = 716, - RBAC_PERM_COMMAND_RESET_ALL = 717, - - // custom permissions 1000+ - RBAC_PERM_MAX -}; - -enum RBACCommandResult -{ - RBAC_OK, - RBAC_CANT_ADD_ALREADY_ADDED, - RBAC_CANT_REVOKE_NOT_IN_LIST, - RBAC_IN_GRANTED_LIST, - RBAC_IN_DENIED_LIST, - RBAC_ID_DOES_NOT_EXISTS -}; - -typedef std::bitset RBACPermissionContainer; -typedef std::set RBACRoleContainer; -typedef std::set RBACGroupContainer; - -class RBACObject -{ - public: - RBACObject(uint32 id = 0, std::string const& name = ""): - _id(id), _name(name) { } - - virtual ~RBACObject() { } - - /// Gets the Name of the Object - std::string const& GetName() const { return _name; } - /// Gets the Id of the Object - uint32 GetId() const { return _id; } - - private: - uint32 _id; ///> id of the object - std::string _name; ///> name of the object -}; - -/// Permission: Defines an autorization to perform certain operation -class RBACPermission: public RBACObject -{ - public: - RBACPermission(uint32 id = 0, std::string const& name = ""): - RBACObject(id, name) { } -}; - -/// Set of Permissions -class RBACRole: public RBACObject -{ - public: - RBACRole(uint32 id = 0, std::string const& name = ""): - RBACObject(id, name) { } - - /// Gets the Permissions assigned to this role - RBACPermissionContainer const& GetPermissions() const { return _perms; } - /// Grants a Permission (Adds) - void GrantPermission(uint32 id); - /// Revokes a Permission (Removes) - void RevokePermission(uint32 id); - - private: - RBACPermissionContainer _perms; ///> Set of permissions -}; - -/// Set of Roles -class RBACGroup: public RBACObject -{ - public: - RBACGroup(uint32 id = 0, std::string const& name = ""): - RBACObject(id, name) { } - - /// Gets the Roles assigned to this group - RBACRoleContainer const& GetRoles() const { return _roles; } - /// Grants a Role (Adds) - void GrantRole(uint32 role); - /// Revokes a Role (Removes) - void RevokeRole(uint32 role); - - private: - RBACRoleContainer _roles; ///> Set of Roles -}; - -/** - * @name RBACData - * @brief Contains all needed information about the acccount - * - * This class contains all the data needed to calculate the account permissions. - * RBACDAta is formed by group permissions and user permissions through: - * - Granted Groups, which contains roles, which contains permissions: Set of granted permissions - * - Granted Roles, which contains permissions: Set of granted permissions - * - Denied Roles, which contains permissions: Set of denied permissions - * - Granted Permissions - * - Denied Permissions - * - * Calculation of current Permissions: Granted permissions - Denied permissions - * - Granted permissions: through groups, through roles and directly assigned - * - Denied permissions: through roles and directly assigned - */ -class RBACData: public RBACObject -{ - public: - RBACData(uint32 id, std::string const& name, int32 realmId): - RBACObject(id, name), _realmId(realmId) { } - - /** - * @name HasPermission - * @brief Checks if certain action is allowed - * - * Checks if certain action can be performed. - * - * @return grant or deny action - * - * Example Usage: - * @code - * bool Player::CanJoinArena(Battleground* bg) - * { - * return bg->isArena() && HasPermission(RBAC_PERM_JOIN_ARENA); - * } - * @endcode - */ - bool HasPermission(uint32 permission) const { return _globalPerms.test(permission); } - - // Functions enabled to be used by command system - /// Returns all the granted permissions (after computation) - RBACPermissionContainer const& GetPermissions() const { return _globalPerms; } - /// Returns all the granted permissions - RBACPermissionContainer const& GetGrantedPermissions() const { return _grantedPerms; } - /// Returns all the denied permissions - RBACPermissionContainer const& GetDeniedPermissions() const { return _deniedPerms; } - /// Returns all the granted roles - RBACRoleContainer const& GetGrantedRoles() const { return _grantedRoles; } - /// Returns all the denied roles - RBACRoleContainer const& GetDeniedRoles() const { return _deniedRoles; } - /// Returns all the granted groups - RBACGroupContainer const& GetGroups() const { return _groups; } - - /** - * @name AddGroup - * @brief Adds new group - * - * Add a new group to the account. If realm is 0 or the group can not be added - * No save to db action will be performed. - * - * Fails if group Id does not exists or group already present - * - * @param groupId group to be added - * @param realmId realm affected - * - * @return Success or failure (with reason) to add the group - * - * Example Usage: - * @code - * // previously defined "RBACData* rbac" with proper initialization - * uint32 groupId = 2; - * if (rbac->AddGroup(groupId) == RBAC_OK) - * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Group %u succesfully added", groupId); - * @endcode - */ - RBACCommandResult AddGroup(uint32 groupId, int32 realmId = 0); - - /** - * @name RemoveGroup - * @brief Removes a group - * - * Removes a group from the account. If realm is 0 or the group can not be removed - * No save to db action will be performed. Any delete operation will always affect - * "all realms (-1)" in addition to the realm specified - * - * Fails if group not present - * - * @param groupId group to be removed - * @param realmId realm affected - * - * @return Success or failure (with reason) to remove the group - * - * Example Usage: - * // previously defined "RBACData* rbac" with proper initialization - * uint32 groupId = 2; - * if (rbac->RemoveGroup(groupId) == RBAC_OK) - * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Group %u succesfully removed", groupId); - * @endcode - */ - RBACCommandResult RemoveGroup(uint32 groupId, int32 realmId = 0); - - /** - * @name GrantRole - * @brief Grants a role - * - * Grants a role to the account. If realm is 0 or the role can not be added - * No save to db action will be performed. - * - * Fails if role Id does not exists or role already granted or denied - * - * @param roleId role to be granted - * @param realmId realm affected - * - * @return Success or failure (with reason) to grant the role - * - * Example Usage: - * // previously defined "RBACData* rbac" with proper initialization - * uint32 roleId = 2; - * if (rbac->GrantRole(roleId) == RBAC_IN_DENIED_LIST) - * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Failed to grant role %u, already denied", roleId); - * @endcode - */ - RBACCommandResult GrantRole(uint32 roleId, int32 realmId = 0); - - /** - * @name DenyRole - * @brief Denies a role - * - * Denied a role to the account. If realm is 0 or the role can not be added - * No save to db action will be performed. - * - * Fails if role Id does not exists or role already granted or denied - * - * @param roleId role to be denied - * @param realmId realm affected - * - * @return Success or failure (with reason) to deny the role - * - * Example Usage: - * // previously defined "RBACData* rbac" with proper initialization - * uint32 roleId = 2; - * if (rbac->DenyRole(roleId) == RBAC_ID_DOES_NOT_EXISTS) - * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role Id %u does not exists", roleId); - * @endcode - */ - RBACCommandResult DenyRole(uint32 roleId, int32 realmId = 0); - - /** - * @name RevokeRole - * @brief Removes a role - * - * Removes a role from the account. If realm is 0 or the role can not be removed - * No save to db action will be performed. Any delete operation will always affect - * "all realms (-1)" in addition to the realm specified - * - * Fails if role not present - * - * @param roleId role to be removed - * @param realmId realm affected - * - * @return Success or failure (with reason) to remove the role - * - * Example Usage: - * // previously defined "RBACData* rbac" with proper initialization - * uint32 roleId = 2; - * if (rbac->RevokeRole(roleId) == RBAC_OK) - * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role %u succesfully removed", roleId); - * @endcode - */ - RBACCommandResult RevokeRole(uint32 roleId, int32 realmId = 0); - - /** - * @name GrantRole - * @brief Grants a permission - * - * Grants a permission to the account. If realm is 0 or the permission can not be added - * No save to db action will be performed. - * - * Fails if permission Id does not exists or permission already granted or denied - * - * @param permissionId permission to be granted - * @param realmId realm affected - * - * @return Success or failure (with reason) to grant the permission - * - * Example Usage: - * // previously defined "RBACData* rbac" with proper initialization - * uint32 permissionId = 2; - * if (rbac->GrantRole(permissionId) == RBAC_IN_DENIED_LIST) - * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Failed to grant permission %u, already denied", permissionId); - * @endcode - */ - RBACCommandResult GrantPermission(uint32 permissionId, int32 realmId = 0); - - /** - * @name DenyPermission - * @brief Denies a permission - * - * Denied a permission to the account. If realm is 0 or the permission can not be added - * No save to db action will be performed. - * - * Fails if permission Id does not exists or permission already granted or denied - * - * @param permissionId permission to be denied - * @param realmId realm affected - * - * @return Success or failure (with reason) to deny the permission - * - * Example Usage: - * // previously defined "RBACData* rbac" with proper initialization - * uint32 permissionId = 2; - * if (rbac->DenyRole(permissionId) == RBAC_ID_DOES_NOT_EXISTS) - * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role Id %u does not exists", permissionId); - * @endcode - */ - RBACCommandResult DenyPermission(uint32 permissionId, int32 realmId = 0); - - /** - * @name RevokePermission - * @brief Removes a permission - * - * Removes a permission from the account. If realm is 0 or the permission can not be removed - * No save to db action will be performed. Any delete operation will always affect - * "all realms (-1)" in addition to the realm specified - * - * Fails if permission not present - * - * @param permissionId permission to be removed - * @param realmId realm affected - * - * @return Success or failure (with reason) to remove the permission - * - * Example Usage: - * // previously defined "RBACData* rbac" with proper initialization - * uint32 permissionId = 2; - * if (rbac->RevokeRole(permissionId) == RBAC_OK) - * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Permission %u succesfully removed", permissionId); - * @endcode - */ - RBACCommandResult RevokePermission(uint32 permissionId, int32 realmId = 0); - - /// Loads all permissions, groups and roles assigned to current account - void LoadFromDB(); - private: - /// Saves a role to DB, Granted or Denied - void SaveRole(uint32 role, bool granted, int32 realm); - /// Saves a permission to DB, Granted or Denied - void SavePermission(uint32 role, bool granted, int32 realm); - - /** - * @name CalculateNewPermissions - * @brief Calculates new permissions - * - * Calculates new permissions after some change in groups, roles or permissions. - * The calculation is done Granted - Denied: - * - Granted permissions: through groups, through roles and directly assigned - * - Denied permissions: through roles and directly assigned - */ - void CalculateNewPermissions(); - - int32 GetRealmId() { return _realmId; } - - int32 _realmId; ///> RealmId Affected - RBACGroupContainer _groups; ///> Granted groups - RBACRoleContainer _grantedRoles; ///> Granted roles - RBACRoleContainer _deniedRoles; ///> Denied roles - RBACPermissionContainer _grantedPerms; ///> Granted permissions - RBACPermissionContainer _deniedPerms; ///> Denied permissions - RBACPermissionContainer _globalPerms; ///> Calculated permissions -}; - -#endif +/* + * Copyright (C) 2008-2013 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +/** +* @file RBAC.h +* @brief Role Based Access Control related classes definition +* +* This file contains all the classes and enums used to implement +* Role Based Access Control +* +* RBAC Rules: +* - Pemission: Defines an autorization to perform certain operation. +* - Role: Set of permissions. +* - Group: Set of roles. +* - An Account can have multiple groups, roles and permissions. +* - Account Groups can only be granted or revoked +* - Account Roles and Permissions can be granted, denied or revoked +* - Grant: Assignment of the object (role/permission) and allow it +* - Deny: Assignment of the object (role/permission) and deny it +* - Revoke: Removal of the object (role/permission) no matter if it was granted or denied +* - Global Permissions are computed as: +* Group Grants + Role Grants + User Grans - Role Grants - User Grants +* - Groups, Roles and Permissions can be assigned by realm +*/ + +#ifndef _RBAC_H +#define _RBAC_H + +#include "Define.h" +#include +#include +#include +#include + +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_CONSOLE_COMMANDS = 12, // Not pressent in DB + RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES = 13, + RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_TEAMMASK = 14, + RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_CLASSMASK = 15, + RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK = 16, + RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RESERVEDNAME = 17, + RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_HEROIC_CHARACTER = 18, + RBAC_PERM_SKIP_CHECK_CHAT_CHANNEL_REQ = 19, + RBAC_PERM_SKIP_CHECK_DISABLE_MAP = 20, + RBAC_PERM_SKIP_CHECK_MORE_TALENTS_THAN_ALLOWED = 21, + RBAC_PERM_SKIP_CHECK_CHAT_SPAM = 22, + RBAC_PERM_SKIP_CHECK_OVERSPEED_PING = 23, + RBAC_PERM_TWO_SIDE_CHARACTER_CREATION = 24, + RBAC_PERM_TWO_SIDE_INTERACTION_CHAT = 25, + RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL = 26, + RBAC_PERM_TWO_SIDE_INTERACTION_MAIL = 27, + RBAC_PERM_TWO_SIDE_WHO_LIST = 28, + RBAC_PERM_TWO_SIDE_ADD_FRIEND = 29, + 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_WHO_SEE_ALL_SEC_LEVELS = 35, + RBAC_PERM_CAN_FILTER_WHISPERS = 36, + RBAC_PERM_CHAT_USE_STAFF_BADGE = 37, + RBAC_PERM_RESURRECT_WITH_FULL_HPS = 38, + RBAC_PERM_RESTORE_SAVED_GM_STATE = 39, + RBAC_PERM_ALLOW_GM_FRIEND = 40, + RBAC_PERM_USE_START_GM_LEVEL = 41, + RBAC_PERM_OPCODE_WORLD_TELEPORT = 42, + RBAC_PERM_OPCODE_WHOIS = 43, + RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE = 44, + RBAC_PERM_SILENTLY_JOIN_CHANNEL = 45, + RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR = 46, + RBAC_PERM_CHECK_FOR_LOWER_SECURITY = 47, + RBAC_PERM_COMMANDS_PINFO_CHECK_PERSONAL_DATA = 48, + RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE = 49, + RBAC_PERM_MAY_CHECK_OWN_EMAIL = 50, + // Leave some space for core permissions + RBAC_PERM_COMMAND_RBAC = 200, + RBAC_PERM_COMMAND_RBAC_ACC = 201, + RBAC_PERM_COMMAND_RBAC_ACC_GROUP = 202, + RBAC_PERM_COMMAND_RBAC_ACC_GROUP_ADD = 203, + RBAC_PERM_COMMAND_RBAC_ACC_GROUP_DEL = 204, + RBAC_PERM_COMMAND_RBAC_ACC_ROLE = 205, + RBAC_PERM_COMMAND_RBAC_ACC_ROLE_GRANT = 206, + RBAC_PERM_COMMAND_RBAC_ACC_ROLE_DENY = 207, + RBAC_PERM_COMMAND_RBAC_ACC_ROLE_REVOKE = 208, + RBAC_PERM_COMMAND_RBAC_ACC_PERM = 209, + RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT = 210, + RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY = 211, + RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE = 212, + RBAC_PERM_COMMAND_RBAC_LIST = 213, + RBAC_PERM_COMMAND_RBAC_LIST_GROUPS = 214, + RBAC_PERM_COMMAND_RBAC_LIST_ROLES = 215, + RBAC_PERM_COMMAND_RBAC_LIST_PERMS = 216, + RBAC_PERM_COMMAND_ACCOUNT = 217, + RBAC_PERM_COMMAND_ACCOUNT_ADDON = 218, + RBAC_PERM_COMMAND_ACCOUNT_CREATE = 219, + RBAC_PERM_COMMAND_ACCOUNT_DELETE = 220, + RBAC_PERM_COMMAND_ACCOUNT_LOCK = 221, + RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY = 222, + RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP = 223, + RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST = 224, + RBAC_PERM_COMMAND_ACCOUNT_PASSWORD = 225, + RBAC_PERM_COMMAND_ACCOUNT_SET = 226, + RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON = 227, + RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL = 228, + RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD = 229, + RBAC_PERM_COMMAND_ACHIEVEMENT = 230, + RBAC_PERM_COMMAND_ACHIEVEMENT_ADD = 231, + RBAC_PERM_COMMAND_ARENA = 232, + RBAC_PERM_COMMAND_ARENA_CAPTAIN = 233, + RBAC_PERM_COMMAND_ARENA_CREATE = 234, + RBAC_PERM_COMMAND_ARENA_DISBAND = 235, + RBAC_PERM_COMMAND_ARENA_INFO = 236, + RBAC_PERM_COMMAND_ARENA_LOOKUP = 237, + RBAC_PERM_COMMAND_ARENA_RENAME = 238, + RBAC_PERM_COMMAND_BAN = 239, + RBAC_PERM_COMMAND_BAN_ACCOUNT = 240, + RBAC_PERM_COMMAND_BAN_CHARACTER = 241, + RBAC_PERM_COMMAND_BAN_IP = 242, + RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT = 243, + RBAC_PERM_COMMAND_BANINFO = 244, + RBAC_PERM_COMMAND_BANINFO_ACCOUNT = 245, + RBAC_PERM_COMMAND_BANINFO_CHARACTER = 246, + RBAC_PERM_COMMAND_BANINFO_IP = 247, + RBAC_PERM_COMMAND_BANLIST = 248, + RBAC_PERM_COMMAND_BANLIST_ACCOUNT = 249, + RBAC_PERM_COMMAND_BANLIST_CHARACTER = 250, + RBAC_PERM_COMMAND_BANLIST_IP = 251, + RBAC_PERM_COMMAND_UNBAN = 252, + RBAC_PERM_COMMAND_UNBAN_ACCOUNT = 253, + RBAC_PERM_COMMAND_UNBAN_CHARACTER = 254, + RBAC_PERM_COMMAND_UNBAN_IP = 255, + RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT = 256, + RBAC_PERM_COMMAND_BF = 257, + RBAC_PERM_COMMAND_BF_START = 258, + RBAC_PERM_COMMAND_BF_STOP = 259, + RBAC_PERM_COMMAND_BF_SWITCH = 260, + RBAC_PERM_COMMAND_BF_TIMER = 261, + RBAC_PERM_COMMAND_BF_ENABLE = 262, + RBAC_PERM_COMMAND_ACCOUNT_EMAIL = 263, + RBAC_PERM_COMMAND_ACCOUNT_SET_SEC = 264, + RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_EMAIL = 265, + RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_REGMAIL = 266, + RBAC_PERM_COMMAND_CAST = 267, + RBAC_PERM_COMMAND_CAST_BACK = 268, + RBAC_PERM_COMMAND_CAST_DIST = 269, + RBAC_PERM_COMMAND_CAST_SELF = 270, + RBAC_PERM_COMMAND_CAST_TARGET = 271, + RBAC_PERM_COMMAND_CAST_DEST = 272, + RBAC_PERM_COMMAND_CHARACTER = 273, + RBAC_PERM_COMMAND_CHARACTER_CUSTOMIZE = 274, + RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION = 275, + RBAC_PERM_COMMAND_CHARACTER_CHANGERACE = 276, + RBAC_PERM_COMMAND_CHARACTER_DELETED = 277, + RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE = 278, + RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST = 279, + RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE = 280, + RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD = 281, + RBAC_PERM_COMMAND_CHARACTER_ERASE = 282, + RBAC_PERM_COMMAND_CHARACTER_LEVEL = 283, + RBAC_PERM_COMMAND_CHARACTER_RENAME = 284, + RBAC_PERM_COMMAND_CHARACTER_REPUTATION = 285, + RBAC_PERM_COMMAND_CHARACTER_TITLES = 286, + RBAC_PERM_COMMAND_LEVELUP = 287, + RBAC_PERM_COMMAND_PDUMP = 288, + RBAC_PERM_COMMAND_PDUMP_LOAD = 289, + RBAC_PERM_COMMAND_PDUMP_WRITE = 290, + RBAC_PERM_COMMAND_CHEAT = 291, + RBAC_PERM_COMMAND_CHEAT_CASTTIME = 292, + RBAC_PERM_COMMAND_CHEAT_COOLDOWN = 293, + RBAC_PERM_COMMAND_CHEAT_EXPLORE = 294, + RBAC_PERM_COMMAND_CHEAT_GOD = 295, + RBAC_PERM_COMMAND_CHEAT_POWER = 296, + RBAC_PERM_COMMAND_CHEAT_STATUS = 297, + RBAC_PERM_COMMAND_CHEAT_TAXI = 298, + RBAC_PERM_COMMAND_CHEAT_WATERWALK = 299, + RBAC_PERM_COMMAND_DEBUG = 300, + RBAC_PERM_COMMAND_DEBUG_ANIM = 301, + RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS = 302, + RBAC_PERM_COMMAND_DEBUG_ARENA = 303, + RBAC_PERM_COMMAND_DEBUG_BG = 304, + RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE = 305, + RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE = 306, + RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE = 307, + RBAC_PERM_COMMAND_DEBUG_GETVALUE = 308, + RBAC_PERM_COMMAND_DEBUG_HOSTIL = 309, + RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE = 310, + RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT = 311, + RBAC_PERM_COMMAND_DEBUG_LOS = 312, + RBAC_PERM_COMMAND_DEBUG_MOD32VALUE = 313, + RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS = 314, + RBAC_PERM_COMMAND_DEBUG_PLAY = 315, + RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC = 316, + RBAC_PERM_COMMAND_DEBUG_PLAY_MOVIE = 317, + RBAC_PERM_COMMAND_DEBUG_PLAY_SOUND = 318, + RBAC_PERM_COMMAND_DEBUG_SEND = 319, + RBAC_PERM_COMMAND_DEBUG_SEND_BUYERROR = 320, + RBAC_PERM_COMMAND_DEBUG_SEND_CHANNELNOTIFY = 321, + RBAC_PERM_COMMAND_DEBUG_SEND_CHATMESSAGE = 322, + RBAC_PERM_COMMAND_DEBUG_SEND_EQUIPERROR = 323, + RBAC_PERM_COMMAND_DEBUG_SEND_LARGEPACKET = 324, + RBAC_PERM_COMMAND_DEBUG_SEND_OPCODE = 325, + RBAC_PERM_COMMAND_DEBUG_SEND_QINVALIDMSG = 326, + RBAC_PERM_COMMAND_DEBUG_SEND_QPARTYMSG = 327, + RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR = 328, + RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT = 329, + RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL = 330, + RBAC_PERM_COMMAND_DEBUG_SETAURASTATE = 331, + RBAC_PERM_COMMAND_DEBUG_SETBIT = 332, + RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE = 333, + RBAC_PERM_COMMAND_DEBUG_SETVALUE = 334, + RBAC_PERM_COMMAND_DEBUG_SETVID = 335, + RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE = 336, + RBAC_PERM_COMMAND_DEBUG_THREAT = 337, + RBAC_PERM_COMMAND_DEBUG_UPDATE = 338, + RBAC_PERM_COMMAND_DEBUG_UWS = 339, + RBAC_PERM_COMMAND_WPGPS = 340, + RBAC_PERM_COMMAND_DESERTER = 341, + RBAC_PERM_COMMAND_DESERTER_BG = 342, + RBAC_PERM_COMMAND_DESERTER_BG_ADD = 343, + RBAC_PERM_COMMAND_DESERTER_BG_REMOVE = 344, + RBAC_PERM_COMMAND_DESERTER_INSTANCE = 345, + RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD = 346, + RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE = 347, + RBAC_PERM_COMMAND_DISABLE = 348, + RBAC_PERM_COMMAND_DISABLE_ADD = 349, + RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA = 350, + RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND = 351, + RBAC_PERM_COMMAND_DISABLE_ADD_MAP = 352, + RBAC_PERM_COMMAND_DISABLE_ADD_MMAP = 353, + RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP = 354, + RBAC_PERM_COMMAND_DISABLE_ADD_QUEST = 355, + RBAC_PERM_COMMAND_DISABLE_ADD_SPELL = 356, + RBAC_PERM_COMMAND_DISABLE_ADD_VMAP = 357, + RBAC_PERM_COMMAND_DISABLE_REMOVE = 358, + RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA = 359, + RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND = 360, + RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP = 361, + RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP = 362, + RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP = 363, + RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST = 364, + RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL = 365, + RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP = 366, + RBAC_PERM_COMMAND_EVENT = 367, + RBAC_PERM_COMMAND_EVENT_ACTIVELIST = 368, + RBAC_PERM_COMMAND_EVENT_START = 369, + RBAC_PERM_COMMAND_EVENT_STOP = 370, + RBAC_PERM_COMMAND_GM = 371, + RBAC_PERM_COMMAND_GM_CHAT = 372, + RBAC_PERM_COMMAND_GM_FLY = 373, + RBAC_PERM_COMMAND_GM_INGAME = 374, + RBAC_PERM_COMMAND_GM_LIST = 375, + RBAC_PERM_COMMAND_GM_VISIBLE = 376, + RBAC_PERM_COMMAND_GO = 377, + RBAC_PERM_COMMAND_GO_CREATURE = 378, + RBAC_PERM_COMMAND_GO_GRAVEYARD = 379, + RBAC_PERM_COMMAND_GO_GRID = 380, + RBAC_PERM_COMMAND_GO_OBJECT = 381, + RBAC_PERM_COMMAND_GO_TAXINODE = 382, + RBAC_PERM_COMMAND_GO_TICKET = 383, + RBAC_PERM_COMMAND_GO_TRIGGER = 384, + RBAC_PERM_COMMAND_GO_XYZ = 385, + RBAC_PERM_COMMAND_GO_ZONEXY = 386, + RBAC_PERM_COMMAND_GOBJECT = 387, + RBAC_PERM_COMMAND_GOBJECT_ACTIVATE = 388, + RBAC_PERM_COMMAND_GOBJECT_ADD = 389, + RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP = 390, + RBAC_PERM_COMMAND_GOBJECT_DELETE = 391, + RBAC_PERM_COMMAND_GOBJECT_INFO = 392, + RBAC_PERM_COMMAND_GOBJECT_MOVE = 393, + RBAC_PERM_COMMAND_GOBJECT_NEAR = 394, + RBAC_PERM_COMMAND_GOBJECT_SET = 395, + RBAC_PERM_COMMAND_GOBJECT_SET_PHASE = 396, + RBAC_PERM_COMMAND_GOBJECT_SET_STATE = 397, + RBAC_PERM_COMMAND_GOBJECT_TARGET = 398, + RBAC_PERM_COMMAND_GOBJECT_TURN = 399, + // 400 - reuse + RBAC_PERM_COMMAND_GUILD = 401, + RBAC_PERM_COMMAND_GUILD_CREATE = 402, + RBAC_PERM_COMMAND_GUILD_DELETE = 403, + RBAC_PERM_COMMAND_GUILD_INVITE = 404, + RBAC_PERM_COMMAND_GUILD_UNINVITE = 405, + RBAC_PERM_COMMAND_GUILD_RANK = 406, + RBAC_PERM_COMMAND_GUILD_RENAME = 407, + RBAC_PERM_COMMAND_HONOR = 408, + RBAC_PERM_COMMAND_HONOR_ADD = 409, + RBAC_PERM_COMMAND_HONOR_ADD_KILL = 410, + RBAC_PERM_COMMAND_HONOR_UPDATE = 411, + RBAC_PERM_COMMAND_INSTANCE = 412, + RBAC_PERM_COMMAND_INSTANCE_LISTBINDS = 413, + RBAC_PERM_COMMAND_INSTANCE_UNBIND = 414, + RBAC_PERM_COMMAND_INSTANCE_STATS = 415, + RBAC_PERM_COMMAND_INSTANCE_SAVEDATA = 416, + RBAC_PERM_COMMAND_LEARN = 417, + RBAC_PERM_COMMAND_LEARN_ALL = 418, + RBAC_PERM_COMMAND_LEARN_ALL_MY = 419, + RBAC_PERM_COMMAND_LEARN_ALL_MY_CLASS = 420, + RBAC_PERM_COMMAND_LEARN_ALL_MY_PETTALENTS = 421, + RBAC_PERM_COMMAND_LEARN_ALL_MY_SPELLS = 422, + RBAC_PERM_COMMAND_LEARN_ALL_MY_TALENTS = 423, + RBAC_PERM_COMMAND_LEARN_ALL_GM = 424, + RBAC_PERM_COMMAND_LEARN_ALL_CRAFTS = 425, + RBAC_PERM_COMMAND_LEARN_ALL_DEFAULT = 426, + RBAC_PERM_COMMAND_LEARN_ALL_LANG = 427, + RBAC_PERM_COMMAND_LEARN_ALL_RECIPES = 428, + RBAC_PERM_COMMAND_UNLEARN = 429, + RBAC_PERM_COMMAND_LFG = 430, + RBAC_PERM_COMMAND_LFG_PLAYER = 431, + RBAC_PERM_COMMAND_LFG_GROUP = 432, + RBAC_PERM_COMMAND_LFG_QUEUE = 433, + RBAC_PERM_COMMAND_LFG_CLEAN = 434, + RBAC_PERM_COMMAND_LFG_OPTIONS = 435, + RBAC_PERM_COMMAND_LIST = 436, + RBAC_PERM_COMMAND_LIST_CREATURE = 437, + RBAC_PERM_COMMAND_LIST_ITEM = 438, + RBAC_PERM_COMMAND_LIST_OBJECT = 439, + RBAC_PERM_COMMAND_LIST_AURAS = 440, + RBAC_PERM_COMMAND_LIST_MAIL = 441, + RBAC_PERM_COMMAND_LOOKUP = 442, + RBAC_PERM_COMMAND_LOOKUP_AREA = 443, + RBAC_PERM_COMMAND_LOOKUP_CREATURE = 444, + RBAC_PERM_COMMAND_LOOKUP_EVENT = 445, + RBAC_PERM_COMMAND_LOOKUP_FACTION = 446, + RBAC_PERM_COMMAND_LOOKUP_ITEM = 447, + RBAC_PERM_COMMAND_LOOKUP_ITEMSET = 448, + RBAC_PERM_COMMAND_LOOKUP_OBJECT = 449, + RBAC_PERM_COMMAND_LOOKUP_QUEST = 450, + RBAC_PERM_COMMAND_LOOKUP_PLAYER = 451, + RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP = 452, + RBAC_PERM_COMMAND_LOOKUP_PLAYER_ACCOUNT = 453, + RBAC_PERM_COMMAND_LOOKUP_PLAYER_EMAIL = 454, + RBAC_PERM_COMMAND_LOOKUP_SKILL = 455, + RBAC_PERM_COMMAND_LOOKUP_SPELL = 456, + RBAC_PERM_COMMAND_LOOKUP_SPELL_ID = 457, + RBAC_PERM_COMMAND_LOOKUP_TAXINODE = 458, + RBAC_PERM_COMMAND_LOOKUP_TELE = 459, + RBAC_PERM_COMMAND_LOOKUP_TITLE = 460, + RBAC_PERM_COMMAND_LOOKUP_MAP = 461, + RBAC_PERM_COMMAND_ANNOUNCE = 462, + RBAC_PERM_COMMAND_CHANNEL = 463, + RBAC_PERM_COMMAND_CHANNEL_SET = 464, + RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP = 465, + RBAC_PERM_COMMAND_GMANNOUNCE = 466, + RBAC_PERM_COMMAND_GMNAMEANNOUNCE = 467, + RBAC_PERM_COMMAND_GMNOTIFY = 468, + RBAC_PERM_COMMAND_NAMEANNOUNCE = 469, + RBAC_PERM_COMMAND_NOTIFY = 470, + RBAC_PERM_COMMAND_WHISPERS = 471, + RBAC_PERM_COMMAND_GROUP = 472, + RBAC_PERM_COMMAND_GROUP_LEADER = 473, + RBAC_PERM_COMMAND_GROUP_DISBAND = 474, + RBAC_PERM_COMMAND_GROUP_REMOVE = 475, + RBAC_PERM_COMMAND_GROUP_JOIN = 476, + RBAC_PERM_COMMAND_GROUP_LIST = 477, + RBAC_PERM_COMMAND_GROUP_SUMMON = 478, + RBAC_PERM_COMMAND_PET = 479, + RBAC_PERM_COMMAND_PET_CREATE = 480, + RBAC_PERM_COMMAND_PET_LEARN = 481, + RBAC_PERM_COMMAND_PET_UNLEARN = 482, + RBAC_PERM_COMMAND_SEND = 483, + RBAC_PERM_COMMAND_SEND_ITEMS = 484, + RBAC_PERM_COMMAND_SEND_MAIL = 485, + RBAC_PERM_COMMAND_SEND_MESSAGE = 486, + RBAC_PERM_COMMAND_SEND_MONEY = 487, + RBAC_PERM_COMMAND_ADDITEM = 488, + RBAC_PERM_COMMAND_ADDITEMSET = 489, + RBAC_PERM_COMMAND_APPEAR = 490, + RBAC_PERM_COMMAND_AURA = 491, + RBAC_PERM_COMMAND_BANK = 492, + RBAC_PERM_COMMAND_BINDSIGHT = 493, + RBAC_PERM_COMMAND_COMBATSTOP = 494, + RBAC_PERM_COMMAND_COMETOME = 495, + RBAC_PERM_COMMAND_COMMANDS = 496, + RBAC_PERM_COMMAND_COOLDOWN = 497, + RBAC_PERM_COMMAND_DAMAGE = 498, + RBAC_PERM_COMMAND_DEV = 499, + RBAC_PERM_COMMAND_DIE = 500, + RBAC_PERM_COMMAND_DISMOUNT = 501, + RBAC_PERM_COMMAND_DISTANCE = 502, + RBAC_PERM_COMMAND_FLUSHARENAPOINTS = 503, + RBAC_PERM_COMMAND_FREEZE = 504, + RBAC_PERM_COMMAND_GPS = 505, + RBAC_PERM_COMMAND_GUID = 506, + RBAC_PERM_COMMAND_HELP = 507, + RBAC_PERM_COMMAND_HIDEAREA = 508, + RBAC_PERM_COMMAND_ITEMMOVE = 509, + RBAC_PERM_COMMAND_KICK = 510, + RBAC_PERM_COMMAND_LINKGRAVE = 511, + RBAC_PERM_COMMAND_LISTFREEZE = 512, + RBAC_PERM_COMMAND_MAXSKILL = 513, + RBAC_PERM_COMMAND_MOVEGENS = 514, + RBAC_PERM_COMMAND_MUTE = 515, + RBAC_PERM_COMMAND_NEARGRAVE = 516, + RBAC_PERM_COMMAND_PINFO = 517, + RBAC_PERM_COMMAND_PLAYALL = 518, + RBAC_PERM_COMMAND_POSSESS = 519, + RBAC_PERM_COMMAND_RECALL = 520, + RBAC_PERM_COMMAND_REPAIRITEMS = 521, + RBAC_PERM_COMMAND_RESPAWN = 522, + RBAC_PERM_COMMAND_REVIVE = 523, + RBAC_PERM_COMMAND_SAVE = 524, + RBAC_PERM_COMMAND_SAVEALL = 525, + RBAC_PERM_COMMAND_SETSKILL = 526, + RBAC_PERM_COMMAND_SHOWAREA = 527, + RBAC_PERM_COMMAND_SUMMON = 528, + RBAC_PERM_COMMAND_UNAURA = 529, + RBAC_PERM_COMMAND_UNBINDSIGHT = 530, + RBAC_PERM_COMMAND_UNFREEZE = 531, + RBAC_PERM_COMMAND_UNMUTE = 532, + RBAC_PERM_COMMAND_UNPOSSESS = 533, + RBAC_PERM_COMMAND_UNSTUCK = 534, + RBAC_PERM_COMMAND_WCHANGE = 535, + RBAC_PERM_COMMAND_MMAP = 536, + RBAC_PERM_COMMAND_MMAP_LOADEDTILES = 537, + RBAC_PERM_COMMAND_MMAP_LOC = 538, + RBAC_PERM_COMMAND_MMAP_PATH = 539, + RBAC_PERM_COMMAND_MMAP_STATS = 540, + RBAC_PERM_COMMAND_MMAP_TESTAREA = 541, + RBAC_PERM_COMMAND_MORPH = 542, + RBAC_PERM_COMMAND_DEMORPH = 543, + RBAC_PERM_COMMAND_MODIFY = 544, + RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS = 545, + RBAC_PERM_COMMAND_MODIFY_BIT = 546, + RBAC_PERM_COMMAND_MODIFY_DRUNK = 547, + RBAC_PERM_COMMAND_MODIFY_ENERGY = 548, + RBAC_PERM_COMMAND_MODIFY_FACTION = 549, + RBAC_PERM_COMMAND_MODIFY_GENDER = 550, + RBAC_PERM_COMMAND_MODIFY_HONOR = 551, + RBAC_PERM_COMMAND_MODIFY_HP = 552, + RBAC_PERM_COMMAND_MODIFY_MANA = 553, + RBAC_PERM_COMMAND_MODIFY_MONEY = 554, + RBAC_PERM_COMMAND_MODIFY_MOUNT = 555, + RBAC_PERM_COMMAND_MODIFY_PHASE = 556, + RBAC_PERM_COMMAND_MODIFY_RAGE = 557, + RBAC_PERM_COMMAND_MODIFY_REPUTATION = 558, + RBAC_PERM_COMMAND_MODIFY_RUNICPOWER = 559, + RBAC_PERM_COMMAND_MODIFY_SCALE = 560, + RBAC_PERM_COMMAND_MODIFY_SPEED = 561, + RBAC_PERM_COMMAND_MODIFY_SPEED_ALL = 562, + RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK = 563, + RBAC_PERM_COMMAND_MODIFY_SPEED_FLY = 564, + RBAC_PERM_COMMAND_MODIFY_SPEED_WALK = 565, + RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM = 566, + RBAC_PERM_COMMAND_MODIFY_SPELL = 567, + RBAC_PERM_COMMAND_MODIFY_STANDSTATE = 568, + RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS = 569, + RBAC_PERM_COMMAND_NPC = 570, + RBAC_PERM_COMMAND_NPC_ADD = 571, + RBAC_PERM_COMMAND_NPC_ADD_FORMATION = 572, + RBAC_PERM_COMMAND_NPC_ADD_ITEM = 573, + RBAC_PERM_COMMAND_NPC_ADD_MOVE = 574, + RBAC_PERM_COMMAND_NPC_ADD_TEMP = 575, + RBAC_PERM_COMMAND_NPC_DELETE = 576, + RBAC_PERM_COMMAND_NPC_DELETE_ITEM = 577, + RBAC_PERM_COMMAND_NPC_FOLLOW = 578, + RBAC_PERM_COMMAND_NPC_FOLLOW_STOP = 579, + RBAC_PERM_COMMAND_NPC_SET = 580, + RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE = 581, + RBAC_PERM_COMMAND_NPC_SET_ENTRY = 582, + RBAC_PERM_COMMAND_NPC_SET_FACTIONID = 583, + RBAC_PERM_COMMAND_NPC_SET_FLAG = 584, + RBAC_PERM_COMMAND_NPC_SET_LEVEL = 585, + RBAC_PERM_COMMAND_NPC_SET_LINK = 586, + RBAC_PERM_COMMAND_NPC_SET_MODEL = 587, + RBAC_PERM_COMMAND_NPC_SET_MOVETYPE = 588, + RBAC_PERM_COMMAND_NPC_SET_PHASE = 589, + RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST = 590, + RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME = 591, + RBAC_PERM_COMMAND_NPC_SET_DATA = 592, + RBAC_PERM_COMMAND_NPC_INFO = 593, + RBAC_PERM_COMMAND_NPC_NEAR = 594, + RBAC_PERM_COMMAND_NPC_MOVE = 595, + RBAC_PERM_COMMAND_NPC_PLAYEMOTE = 596, + RBAC_PERM_COMMAND_NPC_SAY = 597, + RBAC_PERM_COMMAND_NPC_TEXTEMOTE = 598, + RBAC_PERM_COMMAND_NPC_WHISPER = 599, + RBAC_PERM_COMMAND_NPC_YELL = 600, + RBAC_PERM_COMMAND_NPC_TAME = 601, + RBAC_PERM_COMMAND_QUEST = 602, + RBAC_PERM_COMMAND_QUEST_ADD = 603, + RBAC_PERM_COMMAND_QUEST_COMPLETE = 604, + RBAC_PERM_COMMAND_QUEST_REMOVE = 605, + RBAC_PERM_COMMAND_QUEST_REWARD = 606, + RBAC_PERM_COMMANDS_RELOAD = 607, + RBAC_PERM_COMMANDS_RELOAD_ACCESS_REQUIREMENT = 608, + RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_CRITERIA_DATA = 609, + RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_REWARD = 610, + RBAC_PERM_COMMANDS_RELOAD_ALL = 611, + RBAC_PERM_COMMANDS_RELOAD_ALL_ACHIEVEMENT = 612, + RBAC_PERM_COMMANDS_RELOAD_ALL_AREA = 613, + RBAC_PERM_COMMANDS_RELOAD_ALL_EVENTAI = 614, + RBAC_PERM_COMMANDS_RELOAD_ALL_GOSSIP = 615, + RBAC_PERM_COMMANDS_RELOAD_ALL_ITEM = 616, + RBAC_PERM_COMMANDS_RELOAD_ALL_LOCALES = 617, + RBAC_PERM_COMMANDS_RELOAD_ALL_LOOT = 618, + RBAC_PERM_COMMANDS_RELOAD_ALL_NPC = 619, + RBAC_PERM_COMMANDS_RELOAD_ALL_QUEST = 620, + RBAC_PERM_COMMANDS_RELOAD_ALL_SCRIPTS = 621, + RBAC_PERM_COMMANDS_RELOAD_ALL_SPELL = 622, + RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_INVOLVEDRELATION = 623, + RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TAVERN = 624, + RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TELEPORT = 625, + RBAC_PERM_COMMANDS_RELOAD_AUCTIONS = 626, + RBAC_PERM_COMMANDS_RELOAD_AUTOBROADCAST = 627, + RBAC_PERM_COMMANDS_RELOAD_COMMAND = 628, + RBAC_PERM_COMMANDS_RELOAD_CONDITIONS = 629, + RBAC_PERM_COMMANDS_RELOAD_CONFIG = 630, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_SCRIPTS = 631, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_AI_TEXTS = 632, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_LINKED_RESPAWN = 633, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_LOOT_TEMPLATE = 634, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_ONKILL_REPUTATION = 635, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTENDER = 636, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTSTARTER = 637, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_SUMMON_GROUPS = 638, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEMPLATE = 639, + RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEXT = 640, + RBAC_PERM_COMMANDS_RELOAD_DISABLES = 641, + RBAC_PERM_COMMANDS_RELOAD_DISENCHANT_LOOT_TEMPLATE = 642, + RBAC_PERM_COMMANDS_RELOAD_EVENT_SCRIPTS = 643, + RBAC_PERM_COMMANDS_RELOAD_FISHING_LOOT_TEMPLATE = 644, + RBAC_PERM_COMMANDS_RELOAD_GAME_GRAVEYARD_ZONE = 645, + RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTENDER = 646, + RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE = 647, + RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTSTARTER = 648, + RBAC_PERM_COMMANDS_RELOAD_GAME_TELE = 649, + RBAC_PERM_COMMANDS_RELOAD_GM_TICKETS = 650, + RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU = 651, + RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU_OPTION = 652, + RBAC_PERM_COMMANDS_RELOAD_ITEM_ENCHANTMENT_TEMPLATE = 653, + RBAC_PERM_COMMANDS_RELOAD_ITEM_LOOT_TEMPLATE = 654, + RBAC_PERM_COMMANDS_RELOAD_ITEM_SET_NAMES = 655, + RBAC_PERM_COMMANDS_RELOAD_LFG_DUNGEON_REWARDS = 656, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_ACHIEVEMENT_REWARD = 657, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE = 658, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE_TEXT = 659, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_GAMEOBJECT = 660, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_GOSSIP_MENU_OPTION = 661, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM = 662, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM_SET_NAME = 663, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_NPC_TEXT = 664, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_PAGE_TEXT = 665, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_POINTS_OF_INTEREST = 666, + RBAC_PERM_COMMANDS_RELOAD_LOCALES_QUEST = 667, + RBAC_PERM_COMMANDS_RELOAD_MAIL_LEVEL_REWARD = 668, + RBAC_PERM_COMMANDS_RELOAD_MAIL_LOOT_TEMPLATE = 669, + RBAC_PERM_COMMANDS_RELOAD_MILLING_LOOT_TEMPLATE = 670, + RBAC_PERM_COMMANDS_RELOAD_NPC_SPELLCLICK_SPELLS = 671, + RBAC_PERM_COMMANDS_RELOAD_NPC_TRAINER = 672, + RBAC_PERM_COMMANDS_RELOAD_NPC_VENDOR = 673, + RBAC_PERM_COMMANDS_RELOAD_PAGE_TEXT = 674, + RBAC_PERM_COMMANDS_RELOAD_PICKPOCKETING_LOOT_TEMPLATE = 675, + RBAC_PERM_COMMANDS_RELOAD_POINTS_OF_INTEREST = 676, + RBAC_PERM_COMMANDS_RELOAD_PROSPECTING_LOOT_TEMPLATE = 677, + RBAC_PERM_COMMANDS_RELOAD_QUEST_POI = 678, + RBAC_PERM_COMMANDS_RELOAD_QUEST_TEMPLATE = 679, + RBAC_PERM_COMMANDS_RELOAD_RBAC = 680, + RBAC_PERM_COMMANDS_RELOAD_REFERENCE_LOOT_TEMPLATE = 681, + RBAC_PERM_COMMANDS_RELOAD_REPUTATION_REWARD_RATE = 682, + RBAC_PERM_COMMANDS_RELOAD_RESERVED_NAME = 683, + RBAC_PERM_COMMANDS_RELOAD_SKILL_DISCOVERY_TEMPLATE = 684, + RBAC_PERM_COMMANDS_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE = 685, + RBAC_PERM_COMMANDS_RELOAD_SKILL_FISHING_BASE_LEVEL = 686, + RBAC_PERM_COMMANDS_RELOAD_SKINNING_LOOT_TEMPLATE = 687, + RBAC_PERM_COMMANDS_RELOAD_SMART_SCRIPTS = 688, + RBAC_PERM_COMMANDS_RELOAD_SPELL_AREA = 689, + RBAC_PERM_COMMANDS_RELOAD_SPELL_BONUS_DATA = 690, + RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP = 691, + RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP_STACK_RULES = 692, + RBAC_PERM_COMMANDS_RELOAD_SPELL_LEARN_SPELL = 693, + RBAC_PERM_COMMANDS_RELOAD_SPELL_LINKED_SPELL = 694, + RBAC_PERM_COMMANDS_RELOAD_SPELL_LOOT_TEMPLATE = 695, + RBAC_PERM_COMMANDS_RELOAD_SPELL_PET_AURAS = 696, + RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC = 697, + RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC_EVENT = 698, + RBAC_PERM_COMMANDS_RELOAD_SPELL_REQUIRED = 699, + RBAC_PERM_COMMANDS_RELOAD_SPELL_SCRIPTS = 700, + RBAC_PERM_COMMANDS_RELOAD_SPELL_TARGET_POSITION = 701, + RBAC_PERM_COMMANDS_RELOAD_SPELL_THREATS = 702, + RBAC_PERM_COMMANDS_RELOAD_SPILLOVER_TEMPLATE = 703, + RBAC_PERM_COMMANDS_RELOAD_TRINITY_STRING = 704, + RBAC_PERM_COMMANDS_RELOAD_VEHICLE_ACCESORY = 705, + RBAC_PERM_COMMANDS_RELOAD_VEHICLE_TEMPLATE_ACCESSORY = 706, + RBAC_PERM_COMMANDS_RELOAD_WARDEN_ACTION = 707, + RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_DATA = 708, + RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_SCRIPTS = 709, + RBAC_PERM_COMMAND_RESET = 710, + RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS = 711, + RBAC_PERM_COMMAND_RESET_HONOR = 712, + RBAC_PERM_COMMAND_RESET_LEVEL = 713, + RBAC_PERM_COMMAND_RESET_SPELLS = 714, + RBAC_PERM_COMMAND_RESET_STATS = 715, + RBAC_PERM_COMMAND_RESET_TALENTS = 716, + RBAC_PERM_COMMAND_RESET_ALL = 717, + RBAC_PERM_COMMAND_SERVER = 718, + RBAC_PERM_COMMAND_SERVER_CORPSES = 719, + RBAC_PERM_COMMAND_SERVER_EXIT = 720, + RBAC_PERM_COMMAND_SERVER_IDLERESTART = 721, + RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL = 722, + RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN = 723, + RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL = 724, + RBAC_PERM_COMMAND_SERVER_INFO = 725, + RBAC_PERM_COMMAND_SERVER_PLIMIT = 726, + RBAC_PERM_COMMAND_SERVER_RESTART = 727, + RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL = 728, + RBAC_PERM_COMMAND_SERVER_SET = 729, + RBAC_PERM_COMMAND_SERVER_SET_CLOSED = 730, + RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME = 731, + RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL = 732, + RBAC_PERM_COMMAND_SERVER_SET_MOTD = 733, + RBAC_PERM_COMMAND_SERVER_SHUTDOWN = 734, + RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL = 735, + RBAC_PERM_COMMAND_SERVER_MOTD = 736, + + // custom permissions 1000+ + RBAC_PERM_MAX +}; + +enum RBACCommandResult +{ + RBAC_OK, + RBAC_CANT_ADD_ALREADY_ADDED, + RBAC_CANT_REVOKE_NOT_IN_LIST, + RBAC_IN_GRANTED_LIST, + RBAC_IN_DENIED_LIST, + RBAC_ID_DOES_NOT_EXISTS +}; + +typedef std::bitset RBACPermissionContainer; +typedef std::set RBACRoleContainer; +typedef std::set RBACGroupContainer; + +class RBACObject +{ + public: + RBACObject(uint32 id = 0, std::string const& name = ""): + _id(id), _name(name) { } + + virtual ~RBACObject() { } + + /// Gets the Name of the Object + std::string const& GetName() const { return _name; } + /// Gets the Id of the Object + uint32 GetId() const { return _id; } + + private: + uint32 _id; ///> id of the object + std::string _name; ///> name of the object +}; + +/// Permission: Defines an autorization to perform certain operation +class RBACPermission: public RBACObject +{ + public: + RBACPermission(uint32 id = 0, std::string const& name = ""): + RBACObject(id, name) { } +}; + +/// Set of Permissions +class RBACRole: public RBACObject +{ + public: + RBACRole(uint32 id = 0, std::string const& name = ""): + RBACObject(id, name) { } + + /// Gets the Permissions assigned to this role + RBACPermissionContainer const& GetPermissions() const { return _perms; } + /// Grants a Permission (Adds) + void GrantPermission(uint32 id); + /// Revokes a Permission (Removes) + void RevokePermission(uint32 id); + + private: + RBACPermissionContainer _perms; ///> Set of permissions +}; + +/// Set of Roles +class RBACGroup: public RBACObject +{ + public: + RBACGroup(uint32 id = 0, std::string const& name = ""): + RBACObject(id, name) { } + + /// Gets the Roles assigned to this group + RBACRoleContainer const& GetRoles() const { return _roles; } + /// Grants a Role (Adds) + void GrantRole(uint32 role); + /// Revokes a Role (Removes) + void RevokeRole(uint32 role); + + private: + RBACRoleContainer _roles; ///> Set of Roles +}; + +/** + * @name RBACData + * @brief Contains all needed information about the acccount + * + * This class contains all the data needed to calculate the account permissions. + * RBACDAta is formed by group permissions and user permissions through: + * - Granted Groups, which contains roles, which contains permissions: Set of granted permissions + * - Granted Roles, which contains permissions: Set of granted permissions + * - Denied Roles, which contains permissions: Set of denied permissions + * - Granted Permissions + * - Denied Permissions + * + * Calculation of current Permissions: Granted permissions - Denied permissions + * - Granted permissions: through groups, through roles and directly assigned + * - Denied permissions: through roles and directly assigned + */ +class RBACData: public RBACObject +{ + public: + RBACData(uint32 id, std::string const& name, int32 realmId): + RBACObject(id, name), _realmId(realmId) { } + + /** + * @name HasPermission + * @brief Checks if certain action is allowed + * + * Checks if certain action can be performed. + * + * @return grant or deny action + * + * Example Usage: + * @code + * bool Player::CanJoinArena(Battleground* bg) + * { + * return bg->isArena() && HasPermission(RBAC_PERM_JOIN_ARENA); + * } + * @endcode + */ + bool HasPermission(uint32 permission) const { return _globalPerms.test(permission); } + + // Functions enabled to be used by command system + /// Returns all the granted permissions (after computation) + RBACPermissionContainer const& GetPermissions() const { return _globalPerms; } + /// Returns all the granted permissions + RBACPermissionContainer const& GetGrantedPermissions() const { return _grantedPerms; } + /// Returns all the denied permissions + RBACPermissionContainer const& GetDeniedPermissions() const { return _deniedPerms; } + /// Returns all the granted roles + RBACRoleContainer const& GetGrantedRoles() const { return _grantedRoles; } + /// Returns all the denied roles + RBACRoleContainer const& GetDeniedRoles() const { return _deniedRoles; } + /// Returns all the granted groups + RBACGroupContainer const& GetGroups() const { return _groups; } + + /** + * @name AddGroup + * @brief Adds new group + * + * Add a new group to the account. If realm is 0 or the group can not be added + * No save to db action will be performed. + * + * Fails if group Id does not exists or group already present + * + * @param groupId group to be added + * @param realmId realm affected + * + * @return Success or failure (with reason) to add the group + * + * Example Usage: + * @code + * // previously defined "RBACData* rbac" with proper initialization + * uint32 groupId = 2; + * if (rbac->AddGroup(groupId) == RBAC_OK) + * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Group %u succesfully added", groupId); + * @endcode + */ + RBACCommandResult AddGroup(uint32 groupId, int32 realmId = 0); + + /** + * @name RemoveGroup + * @brief Removes a group + * + * Removes a group from the account. If realm is 0 or the group can not be removed + * No save to db action will be performed. Any delete operation will always affect + * "all realms (-1)" in addition to the realm specified + * + * Fails if group not present + * + * @param groupId group to be removed + * @param realmId realm affected + * + * @return Success or failure (with reason) to remove the group + * + * Example Usage: + * // previously defined "RBACData* rbac" with proper initialization + * uint32 groupId = 2; + * if (rbac->RemoveGroup(groupId) == RBAC_OK) + * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Group %u succesfully removed", groupId); + * @endcode + */ + RBACCommandResult RemoveGroup(uint32 groupId, int32 realmId = 0); + + /** + * @name GrantRole + * @brief Grants a role + * + * Grants a role to the account. If realm is 0 or the role can not be added + * No save to db action will be performed. + * + * Fails if role Id does not exists or role already granted or denied + * + * @param roleId role to be granted + * @param realmId realm affected + * + * @return Success or failure (with reason) to grant the role + * + * Example Usage: + * // previously defined "RBACData* rbac" with proper initialization + * uint32 roleId = 2; + * if (rbac->GrantRole(roleId) == RBAC_IN_DENIED_LIST) + * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Failed to grant role %u, already denied", roleId); + * @endcode + */ + RBACCommandResult GrantRole(uint32 roleId, int32 realmId = 0); + + /** + * @name DenyRole + * @brief Denies a role + * + * Denied a role to the account. If realm is 0 or the role can not be added + * No save to db action will be performed. + * + * Fails if role Id does not exists or role already granted or denied + * + * @param roleId role to be denied + * @param realmId realm affected + * + * @return Success or failure (with reason) to deny the role + * + * Example Usage: + * // previously defined "RBACData* rbac" with proper initialization + * uint32 roleId = 2; + * if (rbac->DenyRole(roleId) == RBAC_ID_DOES_NOT_EXISTS) + * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role Id %u does not exists", roleId); + * @endcode + */ + RBACCommandResult DenyRole(uint32 roleId, int32 realmId = 0); + + /** + * @name RevokeRole + * @brief Removes a role + * + * Removes a role from the account. If realm is 0 or the role can not be removed + * No save to db action will be performed. Any delete operation will always affect + * "all realms (-1)" in addition to the realm specified + * + * Fails if role not present + * + * @param roleId role to be removed + * @param realmId realm affected + * + * @return Success or failure (with reason) to remove the role + * + * Example Usage: + * // previously defined "RBACData* rbac" with proper initialization + * uint32 roleId = 2; + * if (rbac->RevokeRole(roleId) == RBAC_OK) + * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role %u succesfully removed", roleId); + * @endcode + */ + RBACCommandResult RevokeRole(uint32 roleId, int32 realmId = 0); + + /** + * @name GrantRole + * @brief Grants a permission + * + * Grants a permission to the account. If realm is 0 or the permission can not be added + * No save to db action will be performed. + * + * Fails if permission Id does not exists or permission already granted or denied + * + * @param permissionId permission to be granted + * @param realmId realm affected + * + * @return Success or failure (with reason) to grant the permission + * + * Example Usage: + * // previously defined "RBACData* rbac" with proper initialization + * uint32 permissionId = 2; + * if (rbac->GrantRole(permissionId) == RBAC_IN_DENIED_LIST) + * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Failed to grant permission %u, already denied", permissionId); + * @endcode + */ + RBACCommandResult GrantPermission(uint32 permissionId, int32 realmId = 0); + + /** + * @name DenyPermission + * @brief Denies a permission + * + * Denied a permission to the account. If realm is 0 or the permission can not be added + * No save to db action will be performed. + * + * Fails if permission Id does not exists or permission already granted or denied + * + * @param permissionId permission to be denied + * @param realmId realm affected + * + * @return Success or failure (with reason) to deny the permission + * + * Example Usage: + * // previously defined "RBACData* rbac" with proper initialization + * uint32 permissionId = 2; + * if (rbac->DenyRole(permissionId) == RBAC_ID_DOES_NOT_EXISTS) + * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Role Id %u does not exists", permissionId); + * @endcode + */ + RBACCommandResult DenyPermission(uint32 permissionId, int32 realmId = 0); + + /** + * @name RevokePermission + * @brief Removes a permission + * + * Removes a permission from the account. If realm is 0 or the permission can not be removed + * No save to db action will be performed. Any delete operation will always affect + * "all realms (-1)" in addition to the realm specified + * + * Fails if permission not present + * + * @param permissionId permission to be removed + * @param realmId realm affected + * + * @return Success or failure (with reason) to remove the permission + * + * Example Usage: + * // previously defined "RBACData* rbac" with proper initialization + * uint32 permissionId = 2; + * if (rbac->RevokeRole(permissionId) == RBAC_OK) + * TC_LOG_DEBUG(LOG_FILTER_PLAYER, "Permission %u succesfully removed", permissionId); + * @endcode + */ + RBACCommandResult RevokePermission(uint32 permissionId, int32 realmId = 0); + + /// Loads all permissions, groups and roles assigned to current account + void LoadFromDB(); + private: + /// Saves a role to DB, Granted or Denied + void SaveRole(uint32 role, bool granted, int32 realm); + /// Saves a permission to DB, Granted or Denied + void SavePermission(uint32 role, bool granted, int32 realm); + + /** + * @name CalculateNewPermissions + * @brief Calculates new permissions + * + * Calculates new permissions after some change in groups, roles or permissions. + * The calculation is done Granted - Denied: + * - Granted permissions: through groups, through roles and directly assigned + * - Denied permissions: through roles and directly assigned + */ + void CalculateNewPermissions(); + + int32 GetRealmId() { return _realmId; } + + int32 _realmId; ///> RealmId Affected + RBACGroupContainer _groups; ///> Granted groups + RBACRoleContainer _grantedRoles; ///> Granted roles + RBACRoleContainer _deniedRoles; ///> Denied roles + RBACPermissionContainer _grantedPerms; ///> Granted permissions + RBACPermissionContainer _deniedPerms; ///> Denied permissions + RBACPermissionContainer _globalPerms; ///> Calculated permissions +}; + +#endif diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index 34543a1a4a5..71f232d33a6 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -39,60 +39,60 @@ public: { static ChatCommand serverIdleRestartCommandTable[] = { - { "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL }, - { "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerIdleRestartCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cancel", RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL }, + { "" , RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, &HandleServerIdleRestartCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand serverIdleShutdownCommandTable[] = { - { "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL }, - { "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerIdleShutDownCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cancel", RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL }, + { "" , RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, &HandleServerIdleShutDownCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand serverRestartCommandTable[] = { - { "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL }, - { "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerRestartCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cancel", RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL }, + { "" , RBAC_PERM_COMMAND_SERVER_RESTART, true, &HandleServerRestartCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand serverShutdownCommandTable[] = { - { "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL }, - { "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cancel", RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL }, + { "" , RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, &HandleServerShutDownCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand serverSetCommandTable[] = { - { "difftime", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerSetDiffTimeCommand, "", NULL }, - { "loglevel", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerSetLogLevelCommand, "", NULL }, - { "motd", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerSetMotdCommand, "", NULL }, - { "closed", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerSetClosedCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "difftime", RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME, true, &HandleServerSetDiffTimeCommand, "", NULL }, + { "loglevel", RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL, true, &HandleServerSetLogLevelCommand, "", NULL }, + { "motd", RBAC_PERM_COMMAND_SERVER_SET_MOTD, true, &HandleServerSetMotdCommand, "", NULL }, + { "closed", RBAC_PERM_COMMAND_SERVER_SET_CLOSED, true, &HandleServerSetClosedCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand serverCommandTable[] = { - { "corpses", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleServerCorpsesCommand, "", NULL }, - { "exit", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerExitCommand, "", NULL }, - { "idlerestart", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverIdleRestartCommandTable }, - { "idleshutdown", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverIdleShutdownCommandTable }, - { "info", RBAC_PERM_PLAYER_COMMANDS, true, &HandleServerInfoCommand, "", NULL }, - { "motd", RBAC_PERM_PLAYER_COMMANDS, true, &HandleServerMotdCommand, "", NULL }, - { "plimit", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerPLimitCommand, "", NULL }, - { "restart", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverRestartCommandTable }, - { "shutdown", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverShutdownCommandTable }, - { "set", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverSetCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "corpses", RBAC_PERM_COMMAND_SERVER_CORPSES, true, &HandleServerCorpsesCommand, "", NULL }, + { "exit", RBAC_PERM_COMMAND_SERVER_EXIT, true, &HandleServerExitCommand, "", NULL }, + { "idlerestart", RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, NULL, "", serverIdleRestartCommandTable }, + { "idleshutdown", RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, NULL, "", serverIdleShutdownCommandTable }, + { "info", RBAC_PERM_COMMAND_SERVER_INFO, true, &HandleServerInfoCommand, "", NULL }, + { "motd", RBAC_PERM_COMMAND_SERVER_MOTD, true, &HandleServerMotdCommand, "", NULL }, + { "plimit", RBAC_PERM_COMMAND_SERVER_PLIMIT, true, &HandleServerPLimitCommand, "", NULL }, + { "restart", RBAC_PERM_COMMAND_SERVER_RESTART, true, NULL, "", serverRestartCommandTable }, + { "shutdown", RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, NULL, "", serverShutdownCommandTable }, + { "set", RBAC_PERM_COMMAND_SERVER_SET, true, NULL, "", serverSetCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "server", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "server", RBAC_PERM_COMMAND_SERVER, true, NULL, "", serverCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From 68ab10ccd4b3358ddff4644a2350906d598b2424 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 15:01:39 +0200 Subject: Core/RBAC: Move tele commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_11_auth_misc.sql | 20 ++++++++++++++++++++ sql/updates/world/2013_09_10_13_world_command.sql | 10 ++++++++++ src/server/game/Accounts/RBAC.h | 5 +++++ src/server/scripts/Commands/cs_tele.cpp | 16 ++++++++-------- 4 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_11_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_13_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_11_auth_misc.sql b/sql/updates/auth/2013_09_10_11_auth_misc.sql new file mode 100644 index 00000000000..011f1219547 --- /dev/null +++ b/sql/updates/auth/2013_09_10_11_auth_misc.sql @@ -0,0 +1,20 @@ +/* cs_tele.cpp */ + +SET @id = 737; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+4; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'tele'), +(@id+1, 'tele add'), +(@id+2, 'tele del'), +(@id+3, 'tele name'), +(@id+4, 'tele group'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+4; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(4, @id+0), +(4, @id+1), +(4, @id+3), +(4, @id+4); diff --git a/sql/updates/world/2013_09_10_13_world_command.sql b/sql/updates/world/2013_09_10_13_world_command.sql new file mode 100644 index 00000000000..a81b90f21bb --- /dev/null +++ b/sql/updates/world/2013_09_10_13_world_command.sql @@ -0,0 +1,10 @@ +/* cs_tele.cpp */ + +SET @id = 737; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'tele'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'tele add'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'tele del'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'tele name'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'tele group'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 6fa8f2c600a..bee4606ebe0 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -636,6 +636,11 @@ enum RBACPermissions RBAC_PERM_COMMAND_SERVER_SHUTDOWN = 734, RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL = 735, RBAC_PERM_COMMAND_SERVER_MOTD = 736, + RBAC_PERM_COMMAND_TELE = 737, + RBAC_PERM_COMMAND_TELE_ADD = 738, + RBAC_PERM_COMMAND_TELE_DEL = 739, + RBAC_PERM_COMMAND_TELE_NAME = 740, + RBAC_PERM_COMMAND_TELE_GROUP = 741, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp index 9dc013a995f..dec9895af26 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -39,17 +39,17 @@ public: { static ChatCommand teleCommandTable[] = { - { "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleTeleAddCommand, "", NULL }, - { "del", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleTeleDelCommand, "", NULL }, - { "name", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleTeleNameCommand, "", NULL }, - { "group", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleTeleGroupCommand, "", NULL }, - { "", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleTeleCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "add", RBAC_PERM_COMMAND_TELE_ADD, false, &HandleTeleAddCommand, "", NULL }, + { "del", RBAC_PERM_COMMAND_TELE_DEL, true, &HandleTeleDelCommand, "", NULL }, + { "name", RBAC_PERM_COMMAND_TELE_NAME, true, &HandleTeleNameCommand, "", NULL }, + { "group", RBAC_PERM_COMMAND_TELE_GROUP, false, &HandleTeleGroupCommand, "", NULL }, + { "", RBAC_PERM_COMMAND_TELE, false, &HandleTeleCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "tele", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", teleCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "tele", RBAC_PERM_COMMAND_TELE, false, NULL, "", teleCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From b10241876e6c9d45fb1582bdcf553bcb24262df7 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 15:13:08 +0200 Subject: Core/RBAC: Move ticket commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_11_auth_misc.sql | 7 ++-- sql/updates/auth/2013_09_10_12_auth_misc.sql | 49 +++++++++++++++++++++++ sql/updates/world/2013_09_10_14_world_command.sql | 25 ++++++++++++ src/server/game/Accounts/RBAC.h | 19 +++++++++ src/server/scripts/Commands/cs_ticket.cpp | 44 ++++++++++---------- 5 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_12_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_14_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_11_auth_misc.sql b/sql/updates/auth/2013_09_10_11_auth_misc.sql index 011f1219547..e92c1cb3fae 100644 --- a/sql/updates/auth/2013_09_10_11_auth_misc.sql +++ b/sql/updates/auth/2013_09_10_11_auth_misc.sql @@ -14,7 +14,8 @@ INSERT INTO `rbac_permissions` (`id`, `name`) VALUES -- Add permissions to "corresponding Commands Role" DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+4; INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES -(4, @id+0), +(2, @id+0), (4, @id+1), -(4, @id+3), -(4, @id+4); +(4, @id+2), +(2, @id+3), +(2, @id+4); diff --git a/sql/updates/auth/2013_09_10_12_auth_misc.sql b/sql/updates/auth/2013_09_10_12_auth_misc.sql new file mode 100644 index 00000000000..fbf78e175c6 --- /dev/null +++ b/sql/updates/auth/2013_09_10_12_auth_misc.sql @@ -0,0 +1,49 @@ +/* cs_ticket.cpp */ + +SET @id = 742; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+18; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'ticket'), +(@id+1, 'ticket assign'), +(@id+2, 'ticket close'), +(@id+3, 'ticket closedlist'), +(@id+4, 'ticket comment'), +(@id+5, 'ticket complete'), +(@id+6, 'ticket delete'), +(@id+7, 'ticket escalate'), +(@id+8, 'ticket escalatedlist'), +(@id+9, 'ticket list'), +(@id+10, 'ticket onlinelist'), +(@id+11, 'ticket reset'), +(@id+12, 'ticket response'), +(@id+13, 'ticket response append'), +(@id+14, 'ticket response appendln'), +(@id+15, 'ticket togglesystem'), +(@id+16, 'ticket unassign'), +(@id+17, 'ticket viewid'), +(@id+18, 'ticket viewname'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+18; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(2, @id+0), +(3, @id+1), +(2, @id+2), +(2, @id+3), +(2, @id+4), +(2, @id+5), +(4, @id+6), +(2, @id+7), +(3, @id+8), +(2, @id+9), +(2, @id+10), +(4, @id+11), +(2, @id+12), +(2, @id+13), +(2, @id+14), +(4, @id+15), +(3, @id+16), +(2, @id+17), +(2, @id+18); diff --git a/sql/updates/world/2013_09_10_14_world_command.sql b/sql/updates/world/2013_09_10_14_world_command.sql new file mode 100644 index 00000000000..853dcc77fe0 --- /dev/null +++ b/sql/updates/world/2013_09_10_14_world_command.sql @@ -0,0 +1,25 @@ +/* cs_ticket.cpp */ + +SET @id = 742; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'tele'; +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'ticket'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'ticket assign'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'ticket close'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'ticket closedlist'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'ticket comment'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'ticket complete'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'ticket delete'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'ticket escalate'; +UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'ticket escalatedlist'; +UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'ticket list'; +UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'ticket onlinelist'; +UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'ticket reset'; +UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'ticket response'; +UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'ticket response append'; +UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'ticket response appendln'; +UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'ticket togglesystem'; +UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'ticket unassign'; +UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'ticket viewid'; +UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'ticket viewname'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index bee4606ebe0..f2a96145957 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -641,6 +641,25 @@ enum RBACPermissions RBAC_PERM_COMMAND_TELE_DEL = 739, RBAC_PERM_COMMAND_TELE_NAME = 740, RBAC_PERM_COMMAND_TELE_GROUP = 741, + RBAC_PERM_COMMAND_TICKET = 742, + RBAC_PERM_COMMAND_TICKET_ASSIGN = 743, + RBAC_PERM_COMMAND_TICKET_CLOSE = 744, + RBAC_PERM_COMMAND_TICKET_CLOSEDLIST = 745, + RBAC_PERM_COMMAND_TICKET_COMMENT = 746, + RBAC_PERM_COMMAND_TICKET_COMPLETE = 747, + RBAC_PERM_COMMAND_TICKET_DELETE = 748, + RBAC_PERM_COMMAND_TICKET_ESCALATE = 749, + RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST = 750, + RBAC_PERM_COMMAND_TICKET_LIST = 751, + RBAC_PERM_COMMAND_TICKET_ONLINELIST = 752, + RBAC_PERM_COMMAND_TICKET_RESET = 753, + RBAC_PERM_COMMAND_TICKET_RESPONSE = 754, + RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND = 755, + RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN = 756, + RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM = 757, + RBAC_PERM_COMMAND_TICKET_UNASSIGN = 758, + RBAC_PERM_COMMAND_TICKET_VIEWID = 759, + RBAC_PERM_COMMAND_TICKET_VIEWNAME = 760, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index 5c1ce304723..1c60a8143b4 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -40,34 +40,34 @@ public: { static ChatCommand ticketResponseCommandTable[] = { - { "append", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketResponseAppendCommand, "", NULL }, - { "appendln", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketResponseAppendLnCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "append", RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND, true, &HandleGMTicketResponseAppendCommand, "", NULL }, + { "appendln", RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN, true, &HandleGMTicketResponseAppendLnCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand ticketCommandTable[] = { - { "assign", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketAssignToCommand, "", NULL }, - { "close", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCloseByIdCommand, "", NULL }, - { "closedlist", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListClosedCommand, "", NULL }, - { "comment", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCommentCommand, "", NULL }, - { "complete", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCompleteCommand, "", NULL }, - { "delete", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleGMTicketDeleteByIdCommand, "", NULL }, - { "escalate", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketEscalateCommand, "", NULL }, - { "escalatedlist", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketListEscalatedCommand, "", NULL }, - { "list", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListCommand, "", NULL }, - { "onlinelist", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListOnlineCommand, "", NULL }, - { "reset", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleGMTicketResetCommand, "", NULL }, - { "response", RBAC_PERM_MODERATOR_COMMANDS, true, NULL, "", ticketResponseCommandTable }, - { "togglesystem", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleToggleGMTicketSystem, "", NULL }, - { "unassign", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketUnAssignCommand, "", NULL }, - { "viewid", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketGetByIdCommand, "", NULL }, - { "viewname", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketGetByNameCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "assign", RBAC_PERM_COMMAND_TICKET_ASSIGN, true, &HandleGMTicketAssignToCommand, "", NULL }, + { "close", RBAC_PERM_COMMAND_TICKET_CLOSE, true, &HandleGMTicketCloseByIdCommand, "", NULL }, + { "closedlist", RBAC_PERM_COMMAND_TICKET_CLOSEDLIST, true, &HandleGMTicketListClosedCommand, "", NULL }, + { "comment", RBAC_PERM_COMMAND_TICKET_COMMENT, true, &HandleGMTicketCommentCommand, "", NULL }, + { "complete", RBAC_PERM_COMMAND_TICKET_COMPLETE, true, &HandleGMTicketCompleteCommand, "", NULL }, + { "delete", RBAC_PERM_COMMAND_TICKET_DELETE, true, &HandleGMTicketDeleteByIdCommand, "", NULL }, + { "escalate", RBAC_PERM_COMMAND_TICKET_ESCALATE, true, &HandleGMTicketEscalateCommand, "", NULL }, + { "escalatedlist", RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST, true, &HandleGMTicketListEscalatedCommand, "", NULL }, + { "list", RBAC_PERM_COMMAND_TICKET_LIST, true, &HandleGMTicketListCommand, "", NULL }, + { "onlinelist", RBAC_PERM_COMMAND_TICKET_ONLINELIST, true, &HandleGMTicketListOnlineCommand, "", NULL }, + { "reset", RBAC_PERM_COMMAND_TICKET_RESET, true, &HandleGMTicketResetCommand, "", NULL }, + { "response", RBAC_PERM_COMMAND_TICKET_RESPONSE, true, NULL, "", ticketResponseCommandTable }, + { "togglesystem", RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM, true, &HandleToggleGMTicketSystem, "", NULL }, + { "unassign", RBAC_PERM_COMMAND_TICKET_UNASSIGN, true, &HandleGMTicketUnAssignCommand, "", NULL }, + { "viewid", RBAC_PERM_COMMAND_TICKET_VIEWID, true, &HandleGMTicketGetByIdCommand, "", NULL }, + { "viewname", RBAC_PERM_COMMAND_TICKET_VIEWNAME, true, &HandleGMTicketGetByNameCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "ticket", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", ticketCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "ticket", RBAC_PERM_COMMAND_TICKET, false, NULL, "", ticketCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From 78363e11b51c42c7f1d7a9598629531bb353a8ad Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 15:26:48 +0200 Subject: Core/RBAC: Move titles and wp commands to RBAC (using individual permissions) --- sql/updates/auth/2013_09_10_13_auth_misc.sql | 39 +++++++++++++++++++++++ sql/updates/world/2013_09_10_15_world_command.sql | 25 +++++++++++++++ src/server/game/Accounts/RBAC.h | 14 ++++++++ src/server/scripts/Commands/cs_titles.cpp | 18 +++++------ src/server/scripts/Commands/cs_wp.cpp | 20 ++++++------ 5 files changed, 97 insertions(+), 19 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_13_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_15_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_13_auth_misc.sql b/sql/updates/auth/2013_09_10_13_auth_misc.sql new file mode 100644 index 00000000000..825028dcb5a --- /dev/null +++ b/sql/updates/auth/2013_09_10_13_auth_misc.sql @@ -0,0 +1,39 @@ +/* cs_titles.cpp & cs_wp.cpp */ + +SET @id = 761; + +-- Add new permissions +DELETE FROM `rbac_permissions` WHERE `id` BETWEEN @id AND @id+13; +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(@id+0, 'titles'), +(@id+1, 'titles add'), +(@id+2, 'titles current'), +(@id+3, 'titles remove'), +(@id+4, 'titles set'), +(@id+5, 'titles set mask'), +(@id+6, 'titles wp'), +(@id+7, 'titles wp add'), +(@id+8, 'titles wp event'), +(@id+9, 'titles wp load'), +(@id+10, 'titles wp modify'), +(@id+11, 'titles wp unload'), +(@id+12, 'titles wp reload'), +(@id+13, 'titles wp show'); + +-- Add permissions to "corresponding Commands Role" +DELETE FROM `rbac_role_permissions` WHERE `permissionId` BETWEEN @id AND @id+13; +INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES +(3, @id+0), +(3, @id+1), +(3, @id+2), +(3, @id+3), +(3, @id+4), +(3, @id+5), +(3, @id+6), +(3, @id+7), +(3, @id+8), +(3, @id+9), +(3, @id+10), +(3, @id+11), +(4, @id+12), +(3, @id+13); diff --git a/sql/updates/world/2013_09_10_15_world_command.sql b/sql/updates/world/2013_09_10_15_world_command.sql new file mode 100644 index 00000000000..f3601a3041b --- /dev/null +++ b/sql/updates/world/2013_09_10_15_world_command.sql @@ -0,0 +1,25 @@ +/* cs_titles.cpp & cs_wp.cpp */ + +SET @id = 761; + +-- Update command table with new RBAC permissions +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'tele'; +UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'ticket'; +UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'ticket assign'; +UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'ticket close'; +UPDATE `command` SET `permission` = @id+3 WHERE `name` = 'ticket closedlist'; +UPDATE `command` SET `permission` = @id+4 WHERE `name` = 'ticket comment'; +UPDATE `command` SET `permission` = @id+5 WHERE `name` = 'ticket complete'; +UPDATE `command` SET `permission` = @id+6 WHERE `name` = 'ticket delete'; +UPDATE `command` SET `permission` = @id+7 WHERE `name` = 'ticket escalate'; +UPDATE `command` SET `permission` = @id+8 WHERE `name` = 'ticket escalatedlist'; +UPDATE `command` SET `permission` = @id+9 WHERE `name` = 'ticket list'; +UPDATE `command` SET `permission` = @id+10 WHERE `name` = 'ticket onlinelist'; +UPDATE `command` SET `permission` = @id+11 WHERE `name` = 'ticket reset'; +UPDATE `command` SET `permission` = @id+12 WHERE `name` = 'ticket response'; +UPDATE `command` SET `permission` = @id+13 WHERE `name` = 'ticket response append'; +UPDATE `command` SET `permission` = @id+14 WHERE `name` = 'ticket response appendln'; +UPDATE `command` SET `permission` = @id+15 WHERE `name` = 'ticket togglesystem'; +UPDATE `command` SET `permission` = @id+16 WHERE `name` = 'ticket unassign'; +UPDATE `command` SET `permission` = @id+17 WHERE `name` = 'ticket viewid'; +UPDATE `command` SET `permission` = @id+18 WHERE `name` = 'ticket viewname'; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index f2a96145957..3d28ccca9da 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -660,6 +660,20 @@ enum RBACPermissions RBAC_PERM_COMMAND_TICKET_UNASSIGN = 758, RBAC_PERM_COMMAND_TICKET_VIEWID = 759, RBAC_PERM_COMMAND_TICKET_VIEWNAME = 760, + RBAC_PERM_COMMAND_TITLES = 761, + RBAC_PERM_COMMAND_TITLES_ADD = 762, + RBAC_PERM_COMMAND_TITLES_CURRENT = 763, + RBAC_PERM_COMMAND_TITLES_REMOVE = 764, + RBAC_PERM_COMMAND_TITLES_SET = 765, + RBAC_PERM_COMMAND_TITLES_SET_MASK = 766, + RBAC_PERM_COMMAND_WP = 767, + RBAC_PERM_COMMAND_WP_ADD = 768, + RBAC_PERM_COMMAND_WP_EVENT = 769, + RBAC_PERM_COMMAND_WP_LOAD = 770, + RBAC_PERM_COMMAND_WP_MODIFY = 771, + RBAC_PERM_COMMAND_WP_UNLOAD = 772, + RBAC_PERM_COMMAND_WP_RELOAD = 773, + RBAC_PERM_COMMAND_WP_SHOW = 774, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp index 1ffb7206f68..f6fd3170bbc 100644 --- a/src/server/scripts/Commands/cs_titles.cpp +++ b/src/server/scripts/Commands/cs_titles.cpp @@ -37,21 +37,21 @@ public: { static ChatCommand titlesSetCommandTable[] = { - { "mask", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesSetMaskCommand, "", NULL }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "mask", RBAC_PERM_COMMAND_TITLES_SET_MASK, false, &HandleTitlesSetMaskCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand titlesCommandTable[] = { - { "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesAddCommand, "", NULL }, - { "current", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesCurrentCommand, "", NULL }, - { "remove", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesRemoveCommand, "", NULL }, - { "set", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", titlesSetCommandTable }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "add", RBAC_PERM_COMMAND_TITLES_ADD, false, &HandleTitlesAddCommand, "", NULL }, + { "current", RBAC_PERM_COMMAND_TITLES_CURRENT, false, &HandleTitlesCurrentCommand, "", NULL }, + { "remove", RBAC_PERM_COMMAND_TITLES_REMOVE, false, &HandleTitlesRemoveCommand, "", NULL }, + { "set", RBAC_PERM_COMMAND_TITLES_SET, false, NULL, "", titlesSetCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "titles", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", titlesCommandTable }, - { NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL } + { "titles", RBAC_PERM_COMMAND_TITLES, false, NULL, "", titlesCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 834c0e1b266..b1b6030a892 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -38,19 +38,19 @@ public: { static ChatCommand wpCommandTable[] = { - { "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpAddCommand, "", NULL }, - { "event", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpEventCommand, "", NULL }, - { "load", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpLoadCommand, "", NULL }, - { "modify", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpModifyCommand, "", NULL }, - { "unload", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpUnLoadCommand, "", NULL }, - { "reload", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleWpReloadCommand, "", NULL }, - { "show", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpShowCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "add", RBAC_PERM_COMMAND_WP_ADD, false, &HandleWpAddCommand, "", NULL }, + { "event", RBAC_PERM_COMMAND_WP_EVENT, false, &HandleWpEventCommand, "", NULL }, + { "load", RBAC_PERM_COMMAND_WP_LOAD, false, &HandleWpLoadCommand, "", NULL }, + { "modify", RBAC_PERM_COMMAND_WP_MODIFY, false, &HandleWpModifyCommand, "", NULL }, + { "unload", RBAC_PERM_COMMAND_WP_UNLOAD, false, &HandleWpUnLoadCommand, "", NULL }, + { "reload", RBAC_PERM_COMMAND_WP_RELOAD, false, &HandleWpReloadCommand, "", NULL }, + { "show", RBAC_PERM_COMMAND_WP_SHOW, false, &HandleWpShowCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "wp", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", wpCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "wp", RBAC_PERM_COMMAND_WP, false, NULL, "", wpCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } -- cgit v1.2.3 From 953575abfa631b9c58d8a8acc1fc8a37359f6fa6 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 10 Sep 2013 15:35:10 +0200 Subject: Core/RBAC: Remove obsolete generic command permissions Note: If you have any custom command, CHECK THE SQLS BEFORE APPLYING --- sql/updates/auth/2013_09_10_14_auth_misc.sql | 4 ++++ sql/updates/world/2013_09_10_15_world_command.sql | 1 - sql/updates/world/2013_09_10_16_world_command.sql | 2 ++ src/server/game/Accounts/RBAC.h | 11 ++++++----- 4 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 sql/updates/auth/2013_09_10_14_auth_misc.sql create mode 100644 sql/updates/world/2013_09_10_16_world_command.sql (limited to 'src') diff --git a/sql/updates/auth/2013_09_10_14_auth_misc.sql b/sql/updates/auth/2013_09_10_14_auth_misc.sql new file mode 100644 index 00000000000..0f24f96ca99 --- /dev/null +++ b/sql/updates/auth/2013_09_10_14_auth_misc.sql @@ -0,0 +1,4 @@ +-- Remove obsolete permissions + +DELETE FROM `rbac_role_permissions` WHERE `permissionId` IN (7, 8, 9, 10, 12); +DELETE FROM `rbac_permissions` WHERE `id` IN (7, 8, 9, 10, 12); diff --git a/sql/updates/world/2013_09_10_15_world_command.sql b/sql/updates/world/2013_09_10_15_world_command.sql index f3601a3041b..ff70ba9b18d 100644 --- a/sql/updates/world/2013_09_10_15_world_command.sql +++ b/sql/updates/world/2013_09_10_15_world_command.sql @@ -3,7 +3,6 @@ SET @id = 761; -- Update command table with new RBAC permissions -UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'tele'; UPDATE `command` SET `permission` = @id+0 WHERE `name` = 'ticket'; UPDATE `command` SET `permission` = @id+1 WHERE `name` = 'ticket assign'; UPDATE `command` SET `permission` = @id+2 WHERE `name` = 'ticket close'; diff --git a/sql/updates/world/2013_09_10_16_world_command.sql b/sql/updates/world/2013_09_10_16_world_command.sql new file mode 100644 index 00000000000..3a3baf206b8 --- /dev/null +++ b/sql/updates/world/2013_09_10_16_world_command.sql @@ -0,0 +1,2 @@ +-- Update command table and remove obsolete permissions (0 = non existent permission) +UPDATE `command` SET `permission` = 0 WHERE `permission` IN (7, 8, 9, 10, 12); diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 3d28ccca9da..c97bb391022 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -54,12 +54,12 @@ enum RBACPermissions 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, + // 7 - reuse + // 8 - reuse + // 9 - reuse + // 10 - reuse RBAC_PERM_LOG_GM_TRADE = 11, - RBAC_PERM_CONSOLE_COMMANDS = 12, // Not pressent in DB + // 12 - reuse RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES = 13, RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_TEAMMASK = 14, RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_CLASSMASK = 15, @@ -99,6 +99,7 @@ enum RBACPermissions RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE = 49, RBAC_PERM_MAY_CHECK_OWN_EMAIL = 50, // Leave some space for core permissions + RBAC_PERM_COMMAND_RBAC = 200, RBAC_PERM_COMMAND_RBAC_ACC = 201, RBAC_PERM_COMMAND_RBAC_ACC_GROUP = 202, -- cgit v1.2.3