Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
            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);
            }
Esempio n. 6
0
        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);
        }