AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
rbac_commandscript Class Reference
Inheritance diagram for rbac_commandscript:
CommandScript ScriptObject

Public Member Functions

 rbac_commandscript ()
 
ChatCommandTable GetCommands () const override
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Static Public Member Functions

static RBACCommandData GetRBACData (uint32 accountId, std::string const &accountName)
 
static bool HandleRBACPermGrantCommand (ChatHandler *handler, AccountIdentifier account, uint32 permId, Optional< int32 > realmId)
 
static bool HandleRBACPermDenyCommand (ChatHandler *handler, AccountIdentifier account, uint32 permId, Optional< int32 > realmId)
 
static bool HandleRBACPermRevokeCommand (ChatHandler *handler, AccountIdentifier account, uint32 permId, Optional< int32 > realmId)
 
static char const * GetSecurityLevelName (uint8 secLevel)
 
static bool HandleRBACPermListCommand (ChatHandler *handler, AccountIdentifier account)
 
static bool HandleRBACListPermissionsCommand (ChatHandler *handler, Optional< uint32 > permId)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ rbac_commandscript()

rbac_commandscript::rbac_commandscript ( )
inline
49: CommandScript("rbac_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable rbac_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

52 {
53 static ChatCommandTable rbacAccountCommandTable =
54 {
59 };
60
61 static ChatCommandTable rbacCommandTable =
62 {
63 { "account", rbacAccountCommandTable },
65 };
66
67 static ChatCommandTable commandTable =
68 {
69 { "rbac", rbacCommandTable },
70 };
71
72 return commandTable;
73 }
@ LANG_RBAC_HELP_ACC_LIST
Definition Language.h:115
@ LANG_RBAC_HELP_ACC_DENY
Definition Language.h:117
@ LANG_RBAC_HELP_ACC_GRANT
Definition Language.h:116
@ LANG_RBAC_HELP_ACC_REVOKE
Definition Language.h:118
static bool HandleRBACPermListCommand(ChatHandler *handler, AccountIdentifier account)
Definition cs_rbac.cpp:208
static bool HandleRBACListPermissionsCommand(ChatHandler *handler, Optional< uint32 > permId)
Definition cs_rbac.cpp:255
static bool HandleRBACPermDenyCommand(ChatHandler *handler, AccountIdentifier account, uint32 permId, Optional< int32 > realmId)
Definition cs_rbac.cpp:125
static bool HandleRBACPermGrantCommand(ChatHandler *handler, AccountIdentifier account, uint32 permId, Optional< int32 > realmId)
Definition cs_rbac.cpp:88
static bool HandleRBACPermRevokeCommand(ChatHandler *handler, AccountIdentifier account, uint32 permId, Optional< int32 > realmId)
Definition cs_rbac.cpp:162
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT
Definition RBAC.h:116
@ RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY
Definition RBAC.h:117
@ RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE
Definition RBAC.h:118
@ RBAC_PERM_COMMAND_RBAC_ACC_PERM_LIST
Definition RBAC.h:115
@ RBAC_PERM_COMMAND_RBAC_LIST
Definition RBAC.h:119

References HandleRBACListPermissionsCommand(), HandleRBACPermDenyCommand(), HandleRBACPermGrantCommand(), HandleRBACPermListCommand(), HandleRBACPermRevokeCommand(), LANG_RBAC_HELP_ACC_DENY, LANG_RBAC_HELP_ACC_GRANT, LANG_RBAC_HELP_ACC_LIST, LANG_RBAC_HELP_ACC_REVOKE, rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY, rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT, rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_LIST, rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE, and rbac::RBAC_PERM_COMMAND_RBAC_LIST.

◆ GetRBACData()

static RBACCommandData rbac_commandscript::GetRBACData ( uint32  accountId,
std::string const &  accountName 
)
inlinestatic
76 {
77 // session->GetRBACData() can be null after World::ReloadRBAC()
78 if (WorldSession* session = sWorldSessionMgr->FindSession(accountId))
79 if (rbac::RBACData* sessionRbac = session->GetRBACData())
80 return { sessionRbac, false };
81
82 rbac::RBACData* rbac = new rbac::RBACData(accountId, accountName, realm.Id.Realm, AccountMgr::GetSecurity(accountId, realm.Id.Realm));
83 rbac->LoadFromDB();
84
85 return { rbac, true };
86 }
#define sWorldSessionMgr
Definition WorldSessionMgr.h:108
static uint32 GetSecurity(uint32 accountId)
Definition AccountMgr.cpp:257
Player session in the World.
Definition WorldSession.h:384
Definition RBAC.h:732
Realm realm
Definition World.cpp:111
Definition AccountMgr.h:39
uint32 Realm
Definition Realm.h:43
RealmHandle Id
Definition Realm.h:69

References AccountMgr::GetSecurity(), Realm::Id, realm, RealmHandle::Realm, and sWorldSessionMgr.

Referenced by HandleRBACPermDenyCommand(), HandleRBACPermGrantCommand(), HandleRBACPermListCommand(), and HandleRBACPermRevokeCommand().

◆ GetSecurityLevelName()

static char const * rbac_commandscript::GetSecurityLevelName ( uint8  secLevel)
inlinestatic
196 {
197 switch (secLevel)
198 {
199 case SEC_PLAYER: return "SEC_PLAYER";
200 case SEC_MODERATOR: return "SEC_MODERATOR";
201 case SEC_GAMEMASTER: return "SEC_GAMEMASTER";
202 case SEC_ADMINISTRATOR: return "SEC_ADMINISTRATOR";
203 case SEC_CONSOLE: return "SEC_CONSOLE";
204 default: return "Unknown";
205 }
206 }
@ SEC_PLAYER
Definition Common.h:57
@ SEC_ADMINISTRATOR
Definition Common.h:60
@ SEC_GAMEMASTER
Definition Common.h:59
@ SEC_MODERATOR
Definition Common.h:58
@ SEC_CONSOLE
Definition Common.h:61

References SEC_ADMINISTRATOR, SEC_CONSOLE, SEC_GAMEMASTER, SEC_MODERATOR, and SEC_PLAYER.

Referenced by HandleRBACPermListCommand().

◆ HandleRBACListPermissionsCommand()

static bool rbac_commandscript::HandleRBACListPermissionsCommand ( ChatHandler handler,
Optional< uint32 permId 
)
inlinestatic
256 {
257 if (!permId)
258 {
259 rbac::RBACPermissionsContainer const& permissions = sAccountMgr->GetRBACPermissionList();
261 for (auto const& [_, permission] : permissions)
262 {
263 handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, permission->GetId(), permission->GetName().c_str());
264 }
265 }
266 else
267 {
268 rbac::RBACPermission const* permission = sAccountMgr->GetRBACPermission(*permId);
269 if (!permission)
270 {
272 handler->SetSentErrorMessage(true);
273 return false;
274 }
275
277 handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, permission->GetId(), permission->GetName().c_str());
279 for (uint32 linkedPerm : permission->GetLinkedPermissions())
280 if (rbac::RBACPermission const* rbacPermission = sAccountMgr->GetRBACPermission(linkedPerm))
281 handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, rbacPermission->GetId(), rbacPermission->GetName().c_str());
282 }
283
284 return true;
285 }
#define sAccountMgr
Definition AccountMgr.h:93
std::uint32_t uint32
Definition Define.h:107
@ LANG_RBAC_LIST_PERMISSIONS_HEADER
Definition Language.h:100
@ LANG_RBAC_LIST_PERMS_LINKED_HEADER
Definition Language.h:101
@ LANG_RBAC_LIST_ELEMENT
Definition Language.h:103
@ LANG_RBAC_WRONG_PARAMETER_ID
Definition Language.h:95
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:219
void SetSentErrorMessage(bool val)
Definition Chat.h:238
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:168
virtual std::string GetAcoreString(uint32 entry) const
Definition Chat.cpp:42
const std::string & GetName() const
Definition ScriptObject.h:53
Definition RBAC.h:697
std::string const & GetName() const
Gets the Name of the Object.
Definition RBAC.h:703
uint32 GetId() const
Gets the Id of the Object.
Definition RBAC.h:705
std::map< uint32, rbac::RBACPermission * > RBACPermissionsContainer
Definition AccountMgr.h:40

References ChatHandler::GetAcoreString(), rbac::RBACPermission::GetId(), rbac::RBACPermission::GetLinkedPermissions(), rbac::RBACPermission::GetName(), LANG_RBAC_LIST_ELEMENT, LANG_RBAC_LIST_PERMISSIONS_HEADER, LANG_RBAC_LIST_PERMS_LINKED_HEADER, LANG_RBAC_WRONG_PARAMETER_ID, ChatHandler::PSendSysMessage(), sAccountMgr, ChatHandler::SendSysMessage(), and ChatHandler::SetSentErrorMessage().

Referenced by GetCommands().

◆ HandleRBACPermDenyCommand()

static bool rbac_commandscript::HandleRBACPermDenyCommand ( ChatHandler handler,
AccountIdentifier  account,
uint32  permId,
Optional< int32 realmId 
)
inlinestatic
126 {
127 if (handler->HasLowerSecurityAccount(nullptr, account.GetID(), true))
128 return false;
129
130 if (!realmId)
131 realmId = -1;
132
133 RBACCommandData data = GetRBACData(account.GetID(), account.GetName());
134
135 rbac::RBACCommandResult result = data.rbac->DenyPermission(permId, *realmId);
136 rbac::RBACPermission const* permission = sAccountMgr->GetRBACPermission(permId);
137
138 switch (result)
139 {
141 handler->PSendSysMessage(LANG_RBAC_PERM_DENIED_IN_LIST, permId, permission->GetName().c_str(),
142 *realmId, account.GetID(), account.GetName().c_str());
143 break;
145 handler->PSendSysMessage(LANG_RBAC_PERM_DENIED_IN_GRANTED_LIST, permId, permission->GetName().c_str(),
146 *realmId, account.GetID(), account.GetName().c_str());
147 break;
148 case rbac::RBAC_OK:
149 handler->PSendSysMessage(LANG_RBAC_PERM_DENIED, permId, permission->GetName().c_str(),
150 *realmId, account.GetID(), account.GetName().c_str());
151 break;
154 break;
155 default:
156 break;
157 }
158
159 return true;
160 }
@ LANG_RBAC_PERM_DENIED
Definition Language.h:109
@ LANG_RBAC_PERM_DENIED_IN_GRANTED_LIST
Definition Language.h:108
@ LANG_RBAC_PERM_DENIED_IN_LIST
Definition Language.h:107
bool HasLowerSecurityAccount(WorldSession *target, uint32 account, bool strong=false)
Definition Chat.cpp:84
RBACCommandResult DenyPermission(uint32 permissionId, int32 realmId=0)
Definition RBAC.cpp:88
static RBACCommandData GetRBACData(uint32 accountId, std::string const &accountName)
Definition cs_rbac.cpp:75
RBACCommandResult
Definition RBAC.h:685
@ RBAC_OK
Definition RBAC.h:686
@ RBAC_CANT_ADD_ALREADY_ADDED
Definition RBAC.h:687
@ RBAC_IN_GRANTED_LIST
Definition RBAC.h:689
@ RBAC_ID_DOES_NOT_EXISTS
Definition RBAC.h:691
uint32 GetID() const
Definition ChatCommandTags.h:159
std::string const & GetName() const
Definition ChatCommandTags.h:160
Definition cs_rbac.cpp:31
rbac::RBACData * rbac
Definition cs_rbac.cpp:40

References rbac::RBACData::DenyPermission(), Acore::ChatCommands::AccountIdentifier::GetID(), rbac::RBACPermission::GetName(), Acore::ChatCommands::AccountIdentifier::GetName(), GetRBACData(), ChatHandler::HasLowerSecurityAccount(), LANG_RBAC_PERM_DENIED, LANG_RBAC_PERM_DENIED_IN_GRANTED_LIST, LANG_RBAC_PERM_DENIED_IN_LIST, LANG_RBAC_WRONG_PARAMETER_ID, ChatHandler::PSendSysMessage(), RBACCommandData::rbac, rbac::RBAC_CANT_ADD_ALREADY_ADDED, rbac::RBAC_ID_DOES_NOT_EXISTS, rbac::RBAC_IN_GRANTED_LIST, rbac::RBAC_OK, and sAccountMgr.

Referenced by GetCommands().

◆ HandleRBACPermGrantCommand()

static bool rbac_commandscript::HandleRBACPermGrantCommand ( ChatHandler handler,
AccountIdentifier  account,
uint32  permId,
Optional< int32 realmId 
)
inlinestatic
89 {
90 if (handler->HasLowerSecurityAccount(nullptr, account.GetID(), true))
91 return false;
92
93 if (!realmId)
94 realmId = -1;
95
96 RBACCommandData data = GetRBACData(account.GetID(), account.GetName());
97
98 rbac::RBACCommandResult result = data.rbac->GrantPermission(permId, *realmId);
99 rbac::RBACPermission const* permission = sAccountMgr->GetRBACPermission(permId);
100
101 switch (result)
102 {
104 handler->PSendSysMessage(LANG_RBAC_PERM_GRANTED_IN_LIST, permId, permission->GetName().c_str(),
105 *realmId, account.GetID(), account.GetName().c_str());
106 break;
108 handler->PSendSysMessage(LANG_RBAC_PERM_GRANTED_IN_DENIED_LIST, permId, permission->GetName().c_str(),
109 *realmId, account.GetID(), account.GetName().c_str());
110 break;
111 case rbac::RBAC_OK:
112 handler->PSendSysMessage(LANG_RBAC_PERM_GRANTED, permId, permission->GetName().c_str(),
113 *realmId, account.GetID(), account.GetName().c_str());
114 break;
117 break;
118 default:
119 break;
120 }
121
122 return true;
123 }
@ LANG_RBAC_PERM_GRANTED_IN_LIST
Definition Language.h:104
@ LANG_RBAC_PERM_GRANTED
Definition Language.h:106
@ LANG_RBAC_PERM_GRANTED_IN_DENIED_LIST
Definition Language.h:105
RBACCommandResult GrantPermission(uint32 permissionId, int32 realmId=0)
Definition RBAC.cpp:44
@ RBAC_IN_DENIED_LIST
Definition RBAC.h:690

References Acore::ChatCommands::AccountIdentifier::GetID(), rbac::RBACPermission::GetName(), Acore::ChatCommands::AccountIdentifier::GetName(), GetRBACData(), rbac::RBACData::GrantPermission(), ChatHandler::HasLowerSecurityAccount(), LANG_RBAC_PERM_GRANTED, LANG_RBAC_PERM_GRANTED_IN_DENIED_LIST, LANG_RBAC_PERM_GRANTED_IN_LIST, LANG_RBAC_WRONG_PARAMETER_ID, ChatHandler::PSendSysMessage(), RBACCommandData::rbac, rbac::RBAC_CANT_ADD_ALREADY_ADDED, rbac::RBAC_ID_DOES_NOT_EXISTS, rbac::RBAC_IN_DENIED_LIST, rbac::RBAC_OK, and sAccountMgr.

Referenced by GetCommands().

◆ HandleRBACPermListCommand()

static bool rbac_commandscript::HandleRBACPermListCommand ( ChatHandler handler,
AccountIdentifier  account 
)
inlinestatic
209 {
210 RBACCommandData data = GetRBACData(account.GetID(), account.GetName());
211
212 handler->PSendSysMessage(LANG_RBAC_LIST_HEADER_GRANTED, data.rbac->GetId(), data.rbac->GetName().c_str());
214 if (granted.empty())
216 else
217 {
218 for (uint32 grantedId : granted)
219 {
220 rbac::RBACPermission const* permission = sAccountMgr->GetRBACPermission(grantedId);
221 handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, permission->GetId(), permission->GetName().c_str());
222 }
223 }
224
225 handler->PSendSysMessage(LANG_RBAC_LIST_HEADER_DENIED, data.rbac->GetId(), data.rbac->GetName().c_str());
227 if (denied.empty())
229 else
230 {
231 for (uint32 deniedId : denied)
232 {
233 rbac::RBACPermission const* permission = sAccountMgr->GetRBACPermission(deniedId);
234 handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, permission->GetId(), permission->GetName().c_str());
235 }
236 }
237
238 handler->PSendSysMessage(LANG_RBAC_LIST_HEADER_BY_SEC_LEVEL, data.rbac->GetId(), data.rbac->GetName().c_str(),
240 rbac::RBACPermissionContainer const& defaultPermissions = sAccountMgr->GetRBACDefaultPermissions(data.rbac->GetSecurityLevel());
241 if (defaultPermissions.empty())
243 else
244 {
245 for (uint32 defaultPermission : defaultPermissions)
246 {
247 rbac::RBACPermission const* permission = sAccountMgr->GetRBACPermission(defaultPermission);
248 handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, permission->GetId(), permission->GetName().c_str());
249 }
250 }
251
252 return true;
253 }
@ LANG_RBAC_LIST_HEADER_BY_SEC_LEVEL
Definition Language.h:99
@ LANG_RBAC_LIST_HEADER_DENIED
Definition Language.h:98
@ LANG_RBAC_LIST_EMPTY
Definition Language.h:102
@ LANG_RBAC_LIST_HEADER_GRANTED
Definition Language.h:97
RBACPermissionContainer const & GetDeniedPermissions() const
Returns all the denied permissions.
Definition RBAC.h:760
uint32 GetId() const
Gets the Id of the Object.
Definition RBAC.h:741
RBACPermissionContainer const & GetGrantedPermissions() const
Returns all the granted permissions.
Definition RBAC.h:758
uint8 GetSecurityLevel() const
Returns the security level assigned.
Definition RBAC.h:808
std::string const & GetName() const
Gets the Name of the Object.
Definition RBAC.h:739
static char const * GetSecurityLevelName(uint8 secLevel)
Definition cs_rbac.cpp:195
std::set< uint32 > RBACPermissionContainer
Definition RBAC.h:694

References ChatHandler::GetAcoreString(), rbac::RBACData::GetDeniedPermissions(), rbac::RBACData::GetGrantedPermissions(), rbac::RBACPermission::GetId(), rbac::RBACData::GetId(), Acore::ChatCommands::AccountIdentifier::GetID(), rbac::RBACPermission::GetName(), rbac::RBACData::GetName(), Acore::ChatCommands::AccountIdentifier::GetName(), GetRBACData(), rbac::RBACData::GetSecurityLevel(), GetSecurityLevelName(), LANG_RBAC_LIST_ELEMENT, LANG_RBAC_LIST_EMPTY, LANG_RBAC_LIST_HEADER_BY_SEC_LEVEL, LANG_RBAC_LIST_HEADER_DENIED, LANG_RBAC_LIST_HEADER_GRANTED, ChatHandler::PSendSysMessage(), RBACCommandData::rbac, sAccountMgr, and ChatHandler::SendSysMessage().

Referenced by GetCommands().

◆ HandleRBACPermRevokeCommand()

static bool rbac_commandscript::HandleRBACPermRevokeCommand ( ChatHandler handler,
AccountIdentifier  account,
uint32  permId,
Optional< int32 realmId 
)
inlinestatic
163 {
164 if (handler->HasLowerSecurityAccount(nullptr, account.GetID(), true))
165 return false;
166
167 if (!realmId)
168 realmId = -1;
169
170 RBACCommandData data = GetRBACData(account.GetID(), account.GetName());
171
172 rbac::RBACCommandResult result = data.rbac->RevokePermission(permId, *realmId);
173 rbac::RBACPermission const* permission = sAccountMgr->GetRBACPermission(permId);
174
175 switch (result)
176 {
178 handler->PSendSysMessage(LANG_RBAC_PERM_REVOKED_NOT_IN_LIST, permId, permission->GetName().c_str(),
179 *realmId, account.GetID(), account.GetName().c_str());
180 break;
181 case rbac::RBAC_OK:
182 handler->PSendSysMessage(LANG_RBAC_PERM_REVOKED, permId, permission->GetName().c_str(),
183 *realmId, account.GetID(), account.GetName().c_str());
184 break;
187 break;
188 default:
189 break;
190 }
191
192 return true;
193 }
@ LANG_RBAC_PERM_REVOKED_NOT_IN_LIST
Definition Language.h:111
@ LANG_RBAC_PERM_REVOKED
Definition Language.h:110
RBACCommandResult RevokePermission(uint32 permissionId, int32 realmId=0)
Definition RBAC.cpp:142
@ RBAC_CANT_REVOKE_NOT_IN_LIST
Definition RBAC.h:688

References Acore::ChatCommands::AccountIdentifier::GetID(), rbac::RBACPermission::GetName(), Acore::ChatCommands::AccountIdentifier::GetName(), GetRBACData(), ChatHandler::HasLowerSecurityAccount(), LANG_RBAC_PERM_REVOKED, LANG_RBAC_PERM_REVOKED_NOT_IN_LIST, LANG_RBAC_WRONG_PARAMETER_ID, ChatHandler::PSendSysMessage(), RBACCommandData::rbac, rbac::RBAC_CANT_REVOKE_NOT_IN_LIST, rbac::RBAC_ID_DOES_NOT_EXISTS, rbac::RBAC_OK, rbac::RBACData::RevokePermission(), and sAccountMgr.

Referenced by GetCommands().


The documentation for this class was generated from the following file: