public QueryCallback LoadPermissionsAsync() { uint id = GetAccountId(); AccountTypes secLevel = GetSecurity(); Log.outDebug(LogFilter.Rbac, "WorldSession.LoadPermissions [AccountId: {0}, Name: {1}, realmId: {2}, secLevel: {3}]", id, _accountName, Global.WorldMgr.GetRealm().Id.Realm, secLevel); _RBACData = new RBACData(id, _accountName, (int)Global.WorldMgr.GetRealm().Id.Realm, (byte)secLevel); return(_RBACData.LoadFromDBAsync()); }
public void LoadPermissions() { uint id = GetAccountId(); AccountTypes secLevel = GetSecurity(); Log.outDebug(LogFilter.Rbac, "WorldSession.LoadPermissions [AccountId: {0}, Name: {1}, realmId: {2}, secLevel: {3}]", id, _accountName, Global.WorldMgr.GetRealm().Id.Index, secLevel); _RBACData = new RBACData(id, _accountName, (int)Global.WorldMgr.GetRealm().Id.Index, (byte)secLevel); _RBACData.LoadFromDB(); }
public bool HasPermission(uint accountId, RBACPermissions permissionId, uint realmId) { if (accountId == 0) { Log.outError(LogFilter.Rbac, "AccountMgr:HasPermission: Wrong accountId 0"); return(false); } RBACData rbac = new RBACData(accountId, "", (int)realmId); rbac.LoadFromDB(); bool hasPermission = rbac.HasPermission(permissionId); Log.outDebug(LogFilter.Rbac, "AccountMgr:HasPermission [AccountId: {0}, PermissionId: {1}, realmId: {2}]: {3}", accountId, permissionId, realmId, hasPermission); return(hasPermission); }
public void UpdateAccountAccess(RBACData rbac, uint accountId, byte securityLevel, int realmId) { if (rbac != null && securityLevel != rbac.GetSecurityLevel()) { rbac.SetSecurityLevel(securityLevel); } PreparedStatement stmt; SQLTransaction trans = new SQLTransaction(); // Delete old security level from DB if (realmId == -1) { stmt = DB.Login.GetPreparedStatement(LoginStatements.DEL_ACCOUNT_ACCESS); stmt.AddValue(0, accountId); trans.Append(stmt); } else { stmt = DB.Login.GetPreparedStatement(LoginStatements.DEL_ACCOUNT_ACCESS_BY_REALM); stmt.AddValue(0, accountId); stmt.AddValue(1, realmId); trans.Append(stmt); } // Add new security level if (securityLevel != 0) { stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_ACCOUNT_ACCESS); stmt.AddValue(0, accountId); stmt.AddValue(1, securityLevel); stmt.AddValue(2, realmId); trans.Append(stmt); } DB.Login.CommitTransaction(trans); }
static bool HandleSetGmLevelCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { handler.SendSysMessage(CypherStrings.CmdSyntax); return(false); } string targetAccountName = ""; uint targetAccountId = 0; AccountTypes targetSecurity = 0; uint gm = 0; string arg1 = args.NextString(); string arg2 = args.NextString(); string arg3 = args.NextString(); bool isAccountNameGiven = true; if (string.IsNullOrEmpty(arg3)) { if (!handler.getSelectedPlayer()) { return(false); } isAccountNameGiven = false; } if (!isAccountNameGiven && string.IsNullOrEmpty(arg2)) { return(false); } if (isAccountNameGiven) { targetAccountName = arg1; if (Global.AccountMgr.GetId(targetAccountName) == 0) { handler.SendSysMessage(CypherStrings.AccountNotExist, targetAccountName); return(false); } } // Check for invalid specified GM level. if (!uint.TryParse(isAccountNameGiven ? arg2 : arg1, out gm)) { return(false); } if (gm > (uint)AccountTypes.Console) { handler.SendSysMessage(CypherStrings.BadValue); return(false); } // command.getSession() == NULL only for console targetAccountId = (isAccountNameGiven) ? Global.AccountMgr.GetId(targetAccountName) : handler.getSelectedPlayer().GetSession().GetAccountId(); if (!int.TryParse(isAccountNameGiven ? arg3 : arg2, out int gmRealmID)) { return(false); } AccountTypes playerSecurity; if (handler.GetSession() != null) { playerSecurity = Global.AccountMgr.GetSecurity(handler.GetSession().GetAccountId(), gmRealmID); } else { playerSecurity = AccountTypes.Console; } // can set security level only for target with less security and to less security that we have // This is also reject self apply in fact targetSecurity = Global.AccountMgr.GetSecurity(targetAccountId, gmRealmID); if (targetSecurity >= playerSecurity || (AccountTypes)gm >= playerSecurity) { handler.SendSysMessage(CypherStrings.YoursSecurityIsLow); return(false); } PreparedStatement stmt; // Check and abort if the target gm has a higher rank on one of the realms and the new realm is -1 if (gmRealmID == -1 && !Global.AccountMgr.IsConsoleAccount(playerSecurity)) { stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_ACCESS_GMLEVEL_TEST); stmt.AddValue(0, targetAccountId); stmt.AddValue(1, gm); SQLResult result = DB.Login.Query(stmt); if (!result.IsEmpty()) { handler.SendSysMessage(CypherStrings.YoursSecurityIsLow); return(false); } } // Check if provided realmID has a negative value other than -1 if (gmRealmID < -1) { handler.SendSysMessage(CypherStrings.InvalidRealmid); return(false); } RBACData rbac = isAccountNameGiven ? null : handler.getSelectedPlayer().GetSession().GetRBACData(); Global.AccountMgr.UpdateAccountAccess(rbac, targetAccountId, (byte)gm, gmRealmID); handler.SendSysMessage(CypherStrings.YouChangeSecurity, targetAccountName, gm); return(true); }
static RBACCommandData ReadParams(StringArguments args, CommandHandler handler, bool checkParams = true) { if (args.Empty()) { return(null); } string param1 = args.NextString(); string param2 = args.NextString(); string param3 = args.NextString(); int realmId = -1; uint accountId = 0; string accountName; uint id = 0; RBACCommandData data; RBACData rdata = null; bool useSelectedPlayer = false; if (checkParams) { if (string.IsNullOrEmpty(param3)) { if (!string.IsNullOrEmpty(param2)) { realmId = int.Parse(param2); } if (!string.IsNullOrEmpty(param1)) { id = uint.Parse(param1); } useSelectedPlayer = true; } else { id = uint.Parse(param2); realmId = int.Parse(param3); } if (id == 0) { handler.SendSysMessage(CypherStrings.RbacWrongParameterId, id); return(null); } if (realmId < -1 || realmId == 0) { handler.SendSysMessage(CypherStrings.RbacWrongParameterRealm, realmId); return(null); } } else if (string.IsNullOrEmpty(param1)) { useSelectedPlayer = true; } if (useSelectedPlayer) { Player player = handler.getSelectedPlayer(); if (!player) { return(null); } rdata = player.GetSession().GetRBACData(); accountId = rdata.GetId(); Global.AccountMgr.GetName(accountId, out accountName); } else { accountName = param1; accountId = Global.AccountMgr.GetId(accountName); if (accountId == 0) { handler.SendSysMessage(CypherStrings.AccountNotExist, accountName); return(null); } } if (checkParams && handler.HasLowerSecurityAccount(null, accountId, true)) { return(null); } data = new RBACCommandData(); if (rdata == null) { data.rbac = new RBACData(accountId, accountName, (int)Global.WorldMgr.GetRealm().Id.Realm, (byte)Global.AccountMgr.GetSecurity(accountId, (int)Global.WorldMgr.GetRealm().Id.Realm)); data.rbac.LoadFromDB(); data.needDelete = true; } else { data.rbac = rdata; } data.id = id; data.realmId = realmId; return(data); }