コード例 #1
0
        public void Execute(IRocketPlayer caller, string[] command)
        {
            if (command.Length == 0)
            {
                this.SendUsage(caller);
                return;
            }

            var name = command.GetStringParameter(0);

            var region = RegionsPlugin.Instance.GetRegion(name, true);

            if (region == null)
            {
                UnturnedChat.Say(caller, "Region \"" + name + "\" not found", Color.red);
                return;
            }

            if (!region.IsOwner(caller) && !PermissionUtil.HasPermission(caller, "redefine.override"))
            {
                UnturnedChat.Say(caller, "You're not the owner of this region!", Color.red);
                return;
            }

            var args = new ArrayList(command);

            args.RemoveAt(0);

            if (region.Type.OnRedefine(PlayerUtil.GetUnturnedPlayer(caller), (string[])args.ToArray(typeof(string))))
            {
                RegionsPlugin.Instance.Regions.Remove(region);
                RegionsPlugin.Instance.Configuration.Save();
                RegionsPlugin.Instance.OnRegionRemoved(region);
                RegionsPlugin.Instance.Regions.Add(region);
                RegionsPlugin.Instance.Configuration.Save();
                RegionsPlugin.Instance.OnRegionCreated(region);

                UnturnedChat.Say(caller, "Successfully redefined region: " + name, Color.green);
                return;
            }

            UnturnedChat.Say(caller, "Redefine of region: " + name + " failed.", Color.red);
        }
コード例 #2
0
ファイル: PermissionFilter.cs プロジェクト: israelsam/Qantler
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            base.OnActionExecuting(context);

            var p = context.HttpContext.User.GetPermissions();

            bool hasPermission = false;

            foreach (var permission in _permissions)
            {
                if (PermissionUtil.HasPermission(p, (int)permission, Access.Active))
                {
                    hasPermission = true;
                    break;
                }
            }

            if (!hasPermission)
            {
                throw new ForbiddenException(string.Join(", ", _permissions));
            }
        }
コード例 #3
0
        public async Task <bool> CreateLog(DbContext dbContext, Model.Identity old, Model.Identity @new)
        {
            var changes = new List <string>()
            {
                "<b>Change Log:</b>"
            };

            if ([email protected](old.Name, StringComparison.InvariantCultureIgnoreCase))
            {
                changes.Add($"&#8226; <b>Name</b>: {old.Name} to {@new.Name}.");
            }

            if ([email protected](old.Designation, StringComparison.InvariantCultureIgnoreCase))
            {
                changes.Add($"&#8226; <b>Designation</b>: {old.Designation} to {@new.Designation}.");
            }

            if ([email protected](old.Email, StringComparison.InvariantCultureIgnoreCase))
            {
                changes.Add($"&#8226; <b>Email</b>: {old.Email} to {@new.Email}.");
            }

            if (@new.Status != old.Status)
            {
                changes.Add($"&#8226; <b>Status</b>: {old.Status} to {@new.Status}.");
            }

            if (@new.Role != old.Role)
            {
                changes.Add($"&#8226; <b>Role</b>: {old.Role} to {@new.Role}.");
            }

            var newClusters = @new.Clusters?
                              .Where(e => old.Clusters?.FirstOrDefault(o => o.ID == e.ID) == null);

            if (newClusters?.Any() ?? false)
            {
                changes.Add($"&#8226; <b>Added Clusters</b>: {string.Join(", ", newClusters.Select(e => e.District))}.");
            }

            var removedClusters = old.Clusters?
                                  .Where(o => @new.Clusters?.FirstOrDefault(e => e.ID == o.ID) == null);

            if (removedClusters?.Any() ?? false)
            {
                changes.Add($"&#8226; <b>Removed Clusters</b>: {string.Join(", ", removedClusters.Select(e => e.District))}.");
            }

            var newRequestTypes     = @new.RequestTypes?.Where(e => !old.RequestTypes?.Contains(e) ?? true);
            var removedRequestTypes = old.RequestTypes?.Where(e => [email protected]?.Contains(e) ?? true);

            if (newRequestTypes?.Any() ?? false)
            {
                changes.Add($"&#8226; <b>Added Request Types</b>: {string.Join(", ", newRequestTypes)}.");
            }

            if (removedRequestTypes?.Any() ?? false)
            {
                changes.Add($"&#8226; <b>Removed Request Types</b>: {string.Join(", ", removedRequestTypes)}.");
            }

            var addedPermissions   = new List <Permission>();
            var removedPermissions = new List <Permission>();

            if (!string.IsNullOrEmpty(@new.Permissions))
            {
                for (int i = 0; i < @new.Permissions.Length; i++)
                {
                    var newPermission = PermissionUtil.HasPermission(@new.Permissions, i, Access.Active);
                    var oldPermission = PermissionUtil.HasPermission(old.Permissions, i, Access.Active);

                    if (newPermission != oldPermission)
                    {
                        if (newPermission)
                        {
                            addedPermissions.Add((Permission)i);
                        }
                        else
                        {
                            removedPermissions.Add((Permission)i);
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(old.Permissions))
            {
                var start = @new.Permissions?.Length ?? 0;
                for (int i = start; i < old.Permissions.Length; i++)
                {
                    removedPermissions.Add((Permission)i);
                }
            }

            if (addedPermissions.Any())
            {
                changes.Add($"&#8226; <b>Added Permission</b> {string.Join(", ", addedPermissions)}.");
            }

            if (removedPermissions.Any())
            {
                changes.Add($"&#8226; <b>Removed Permission</b>: {string.Join(", ", removedPermissions)}.");
            }

            var hasChanges = changes.Count() > 1;

            if (hasChanges)
            {
                var logID = await dbContext.Log.InsertLog(new Log
                {
                    Action   = await dbContext.Translation.GetTranslation(Locale.EN, "IdentityUpdated"),
                    Notes    = string.Join('\n', changes),
                    UserID   = _user.ID,
                    UserName = _user.Name
                });

                await dbContext.Identity.MapIdentityToLog(_identity.ID, logID);
            }

            return(hasChanges);
        }
コード例 #4
0
        public void Execute(IRocketPlayer caller, string[] command)
        {
            if (command.Length < 2)
            {
                this.SendUsage(caller);
                return;
            }
            var name   = command[0];
            var region = RegionsPlugin.Instance.GetRegion(name, true);

            if (region == null)
            {
                UnturnedChat.Say(caller, "Region \"" + name + "\" not found", Color.red);
                return;
            }

            if (!region.IsOwner(caller) && !PermissionUtil.HasPermission(caller, "flag.override"))
            {
                UnturnedChat.Say(caller, "You're not the owner of this region!", Color.red);
                return;
            }

            var flagName = command[1];

            var t = RegionFlag.GetFlagType(flagName);

            if (t == null)
            {
                UnturnedChat.Say(caller, "Unknown flag: \"" + flagName + "\"", Color.red);
                return;
            }

            var f = region.GetFlag(t);

            if (f == null)
            {
                f      = (RegionFlag)Activator.CreateInstance(t);
                f.Name = RegionFlag.GetFlagName(t);
            }

            var hasFlagPermission = PermissionUtil.HasPermission(caller, "flag." + flagName);
            var usage             = "Usage: /rflag " + name + " " + f.Name + " " + f.Usage + " [-g <group>]";

            if (command.Length == 3 && command[2].Equals("--help"))
            {
                var description = f.Description;
                var value       = f.GetValue <object>();

                UnturnedChat.Say(caller, "Flag: " + f.Name, Color.blue);
                UnturnedChat.Say(caller, "Description: " + description, Color.blue);
                if (!hasFlagPermission)
                {
                    return;
                }
                UnturnedChat.Say(caller, usage);
                UnturnedChat.Say(caller, "Value: " + (value ?? "null"), Color.blue);
                return;
            }

            if (!hasFlagPermission)
            {
                UnturnedChat.Say(caller, "You don't have access to this flag!", Color.red);
                return;
            }


            f.Region = region;

            Group         group    = Group.ALL;
            List <string> args     = new List <string>();
            bool          isValue  = false;
            bool          groupSet = false;

            foreach (string arg in command.Skip(2))
            {
                if (!groupSet)
                {
                    if (isValue)
                    {
                        if (f.SupportsGroups)
                        {
                            group = GroupExtensions.GetGroup(arg);
                        }
                        groupSet = true;
                        isValue  = false;
                        continue;
                    }
                    if (arg.ToLower().Equals("-g") || arg.ToLower().Equals("--group"))
                    {
                        if (!f.SupportsGroups)
                        {
                            UnturnedChat.Say(caller, "Warning: Flag does not support groups", Color.red);
                        }
                        isValue = true;
                        continue;
                    }
                }

                args.Add(arg);
            }

            string shownValue;

            if (isValue || !f.ParseValue(caller, region, args.ToArray(), out shownValue, group))
            {
                UnturnedChat.Say(caller, usage, Color.red);
                return;
            }

            region.SetFlag(f.Name, f.Value, f.GroupValues);

            if (shownValue != null)
            {
                string msg = $"Flag has been set to: {shownValue}";
                if (f.SupportsGroups)
                {
                    msg += $" for group {group}!";
                }
                UnturnedChat.Say(caller, msg, Color.green);
            }

            RegionsPlugin.Instance.Configuration.Save();
        }