Пример #1
0
        public async Task ExecuteAsync(ICommandContext context)
        {
            IUser targetPlayer = await context.Parameters.GetAsync <IUser>(0);

            string groupName = context.Parameters[1];

            string permission = "Rocket.Permissions.ManageGroups." + groupName;
            IPermissionProvider configPermissions = context.Container.Resolve <IPermissionProvider>("default_permissions");
            IPermissionProvider permissions       = context.Container.Resolve <IPermissionProvider>();

            if (await permissions.CheckPermissionAsync(context.User, permission) != PermissionResult.Grant)
            {
                throw new NotEnoughPermissionsException(context.User, permission,
                                                        "You don't have permissions to manage this group.");
            }

            IPermissionGroup groupToUpdate = await configPermissions.GetGroupAsync(groupName);

            if (groupToUpdate == null)
            {
                await context.User.SendMessageAsync($"Group \"{groupName}\" was not found.", Color.Red);

                return;
            }

            await UpdateGroup(context.User, configPermissions, targetPlayer, groupToUpdate);
        }
Пример #2
0
        public virtual void TestRemovePermissionFromGroup()
        {
            IPermissionProvider provider = LoadProvider();
            IPermissionGroup    group    = provider.GetGroup("TestGroup2");

            Assert.IsTrue(provider.RemovePermission(group, "GroupPermission2"));

            Assert.AreEqual(PermissionResult.Default, provider.CheckPermission(group, "GroupPermission2"));
            Assert.AreEqual(PermissionResult.Default, provider.CheckPermission(TestPlayer, "GroupPermission2"));
        }
Пример #3
0
        public virtual async Task TestRemovePermissionFromGroup()
        {
            IPermissionProvider provider = LoadProvider();
            IPermissionGroup    group    = await provider.GetGroupAsync("TestGroup2");

            Assert.IsTrue(await provider.RemovePermissionAsync(group, "GroupPermission2"));

            Assert.AreEqual(PermissionResult.Default, await provider.CheckPermissionAsync(group, "GroupPermission2"));
            Assert.AreEqual(PermissionResult.Default, await provider.CheckPermissionAsync(TestPlayer, "GroupPermission2"));
        }
Пример #4
0
        public virtual async Task TestAddPermissionToGroup()
        {
            IPermissionProvider provider = LoadProvider();
            IPermissionGroup    group    = await provider.GetGroupAsync("TestGroup2");

            await provider.AddPermissionAsync(group, "DynamicGroupPermission");

            Assert.AreEqual(PermissionResult.Grant, await provider.CheckPermissionAsync(group, "DynamicGroupPermission"));
            Assert.AreEqual(PermissionResult.Grant, await provider.CheckPermissionAsync(TestPlayer, "DynamicGroupPermission"));
        }
Пример #5
0
        public virtual void TestAddPermissionToGroup()
        {
            IPermissionProvider provider = LoadProvider();
            IPermissionGroup    group    = provider.GetGroup("TestGroup2");

            provider.AddPermission(group, "DynamicGroupPermission");

            Assert.AreEqual(PermissionResult.Grant, provider.CheckPermission(group, "DynamicGroupPermission"));
            Assert.AreEqual(PermissionResult.Grant, provider.CheckPermission(TestPlayer, "DynamicGroupPermission"));
        }
 protected override async Task ExecuteUpdateAsync(IPermissionActor target, IPermissionGroup permissionGroup)
 {
     if (await m_PermissionGroupStore.RemoveGroupFromActorAsync(target, permissionGroup.Id))
     {
         await Context.Actor.PrintMessageAsync($"Removed \"{target.DisplayName}\" from \"{permissionGroup.DisplayName}\".", Color.DarkGreen);
     }
     else
     {
         await Context.Actor.PrintMessageAsync($"Failed to remove \"{target.DisplayName}\" from \"{permissionGroup.DisplayName}\".", Color.DarkRed);
     }
 }
        public bool CreateGroup(IPermissionGroup group)
        {
            GuardLoaded();
            GuardTarget(group);

            GroupPermissionSection section = GetConfigSection <GroupPermissionSection>(group, true);

            section.Name     = group.Name;
            section.Priority = group.Priority;
            section.Save();
            return(true);
        }
Пример #8
0
 protected override async Task UpdateGroup(IUser user, IPermissionProvider permissions,
                                           IUser targetUser, IPermissionGroup groupToUpdate)
 {
     if (await permissions.AddGroupAsync(targetUser, groupToUpdate))
     {
         await user.SendMessageAsync($"Successfully added {targetUser:Name} to \"{groupToUpdate:Name}\"!",
                                     Color.DarkGreen);
     }
     else
     {
         await user.SendMessageAsync($"Failed to add {targetUser:Name} to \"{groupToUpdate:Name}\"!", Color.Red);
     }
 }
Пример #9
0
 protected override void UpdateGroup(IUser user, IPermissionProvider permissions,
                                     IUserInfo targetUser, IPermissionGroup groupToUpdate)
 {
     if (permissions.AddGroup(targetUser, groupToUpdate))
     {
         user.SendMessage($"Successfully added {targetUser:Name} to \"{groupToUpdate:Name}\"!",
                          Color.DarkGreen);
     }
     else
     {
         user.SendMessage($"Failed to add {targetUser:Name} to \"{groupToUpdate:Name}\"!", Color.Red);
     }
 }
        public async Task <bool> CreateGroupAsync(IPermissionGroup group)
        {
            GuardLoaded();
            GuardTarget(group);

            GroupPermissionSection section = await GetConfigSectionAsync <GroupPermissionSection>(group, true);

            section.Name     = group.Name;
            section.Priority = group.Priority;
            await section.SaveAsync();

            return(true);
        }
Пример #11
0
 protected override async Task UpdateGroupAsync(IUser user, IPermissionProvider permissions,
                                                IUser targetUser, IPermissionGroup groupToUpdate)
 {
     if (await permissions.RemoveGroupAsync(targetUser, groupToUpdate))
     {
         await user.SendMessageAsync($"Successfully removed {targetUser.DisplayName} from \"{groupToUpdate.Name}\"!",
                                     Color.DarkGreen);
     }
     else
     {
         await user.SendMessageAsync($"Failed to remove {targetUser.DisplayName} from \"{groupToUpdate.Name}\"!",
                                     Color.Red);
     }
 }
Пример #12
0
        public virtual void TestHasAllPermissionsGroup()
        {
            IPermissionProvider provider = LoadProvider();
            IPermissionGroup    group    = provider.GetGroup("TestGroup2");

            Assert.AreEqual(PermissionResult.Grant,
                            provider.CheckHasAllPermissions(group, "GroupPermission2", "GroupPermission2.Child"));
            Assert.AreEqual(PermissionResult.Default,
                            provider.CheckHasAllPermissions(group, "GroupPermission2", "NonExistantPermission"));

            //GroupPermission3 is explicitly denied
            Assert.AreEqual(PermissionResult.Deny,
                            provider.CheckHasAllPermissions(group, "GroupPermission2", "GroupPermission3"));
        }
Пример #13
0
        public virtual async Task TestHasAllPermissionsGroup()
        {
            IPermissionChecker  checker  = LoadChecker();
            IPermissionProvider provider = LoadProvider();
            IPermissionGroup    group    = await provider.GetGroupAsync("TestGroup2");

            Assert.AreEqual(PermissionResult.Grant,
                            await checker.CheckHasAllPermissionsAsync(group, "GroupPermission2", "GroupPermission2.Child"));
            Assert.AreEqual(PermissionResult.Default,
                            await checker.CheckHasAllPermissionsAsync(group, "GroupPermission2", "NonExistantPermission"));

            //GroupPermission3 is explicitly denied
            Assert.AreEqual(PermissionResult.Deny,
                            await checker.CheckHasAllPermissionsAsync(group, "GroupPermission2", "GroupPermission3"));
        }
Пример #14
0
        public virtual void TestGroupPermissions()
        {
            IPermissionProvider provider = LoadProvider();
            IPermissionGroup    group    = provider.GetGroup("TestGroup2");

            Assert.AreEqual(PermissionResult.Default,
                            provider.CheckPermission(TestPlayer,
                                                     "GroupPermission1")); // permission of a group the player doesnt belong to
            Assert.AreEqual(PermissionResult.Default, provider.CheckPermission(TestPlayer, "NonExistantPermission"));
            Assert.AreEqual(PermissionResult.Grant, provider.CheckPermission(TestPlayer, "GroupPermission2"));
            Assert.AreEqual(PermissionResult.Deny, provider.CheckPermission(TestPlayer, "GroupPermission3"));

            Assert.AreEqual(PermissionResult.Default, provider.CheckPermission(group, "NonExistantPermission"));
            Assert.AreEqual(PermissionResult.Grant, provider.CheckPermission(group, "GroupPermission2"));
            Assert.AreEqual(PermissionResult.Deny, provider.CheckPermission(group, "GroupPermission3"));
        }
        public bool UpdateGroup(IPermissionGroup group)
        {
            GuardLoaded();
            GuardTarget(group);

            GroupPermissionSection section = GetConfigSection <GroupPermissionSection>(group, false);

            if (section == null)
            {
                return(false);
            }

            section.Name     = group.Name;
            section.Priority = group.Priority;
            section.Save();
            return(true);
        }
Пример #16
0
        /// <summary>
        /// Check if this command is filtered.
        /// </summary>
        /// <param name="group"></param>
        /// <param name="userID"></param>
        /// <param name="channelID"></param>
        /// <param name="guildID"></param>
        /// <param name="roles"></param>
        /// <returns></returns>
        PermissionStatus IsFiltered(IPermissionGroup group, ulong userID, ulong channelID, ulong guildID, List <SocketRole> roles)
        {
            PermissionStatus guildStatus   = group.IsFiltered(guildID, Enums.PermissionTarget.Guild);
            PermissionStatus channelStatus = group.IsFiltered(channelID, Enums.PermissionTarget.Channel);
            PermissionStatus userStatus    = group.IsFiltered(userID, Enums.PermissionTarget.User);
            PermissionStatus roleStatus    = PermissionStatus.NotFound;

            for (int i = 0; i < roles.Count; i++)
            {
                SocketRole       role   = roles[i];
                PermissionStatus status = group.IsFiltered(role.Id, Enums.PermissionTarget.Role);

                if (status != PermissionStatus.NotFound)
                {
                    roleStatus = status;

                    if (roleStatus == PermissionStatus.Approved)
                    {
                        break;
                    }
                }
            }

            if (userStatus != PermissionStatus.NotFound)
            {
                return(userStatus);
            }

            if (roleStatus != PermissionStatus.NotFound)
            {
                return(roleStatus);
            }

            if (channelStatus != PermissionStatus.NotFound)
            {
                return(channelStatus);
            }

            if (guildStatus != PermissionStatus.NotFound)
            {
                return(guildStatus);
            }

            return(PermissionStatus.NotFound);
        }
Пример #17
0
        public virtual async Task TestGroupPermissions()
        {
            IPermissionChecker  checker  = LoadChecker();
            IPermissionProvider provider = LoadProvider();

            IPermissionGroup group = await provider.GetGroupAsync("TestGroup2");

            Assert.AreEqual(PermissionResult.Default, await
                            checker.CheckPermissionAsync(TestPlayer,
                                                         "GroupPermission1")); // permission of a group the player doesnt belong to
            Assert.AreEqual(PermissionResult.Default, await checker.CheckPermissionAsync(TestPlayer, "NonExistantPermission"));
            Assert.AreEqual(PermissionResult.Grant, await checker.CheckPermissionAsync(TestPlayer, "GroupPermission2"));
            Assert.AreEqual(PermissionResult.Deny, await checker.CheckPermissionAsync(TestPlayer, "GroupPermission3"));

            Assert.AreEqual(PermissionResult.Default, await checker.CheckPermissionAsync(group, "NonExistantPermission"));
            Assert.AreEqual(PermissionResult.Grant, await checker.CheckPermissionAsync(group, "GroupPermission2"));
            Assert.AreEqual(PermissionResult.Deny, await checker.CheckPermissionAsync(group, "GroupPermission3"));
        }
        public virtual async Task <bool> UpdateGroupAsync(IPermissionGroup group)
        {
            if (await GetGroupAsync(group.Id) == null)
            {
                return(false);
            }

            var groupData = m_PermissionGroupsDataStore.PermissionGroups.First(d => d.Id.EndsWith(group.Id));

            groupData.DisplayName    = group.DisplayName;
            groupData.IsAutoAssigned = group.IsAutoAssigned;
            groupData.Parents        = group.Parents;
            groupData.Permissions    = group.Parents;
            groupData.Priority       = group.Priority;
            groupData.Data ??= new Dictionary <string, object>();

            await m_PermissionGroupsDataStore.SaveChangesAsync();

            return(true);
        }
        public bool AddGroup(IIdentity target, IPermissionGroup group)
        {
            GuardLoaded();
            GuardTarget(target);
            GuardTarget(group);

            PermissionSection section = target is IPermissionGroup
                ? (PermissionSection)GetConfigSection <GroupPermissionSection>(target, true)
                : GetConfigSection <PlayerPermissionSection>(target, true);

            List <string> groups = section.GetGroups().ToList();

            if (!groups.Any(c => c.Equals(group.Id, StringComparison.OrdinalIgnoreCase)))
            {
                groups.Add(group.Id);
            }
            section.SetGroups(groups.ToArray());
            section.Save();
            return(true);
        }
        public async Task <bool> AddGroupAsync(IPermissionActor target, IPermissionGroup group)
        {
            GuardLoaded();
            GuardTarget(target);
            GuardTarget(group);

            PermissionSection section = target is IPermissionGroup
                ? (PermissionSection) await GetConfigSectionAsync <GroupPermissionSection>(target, true)
                : await GetConfigSectionAsync <PlayerPermissionSection>(target, true);

            List <string> groups = section.GetGroups().ToList();

            if (!groups.Any(c => c.Equals(group.Id, StringComparison.OrdinalIgnoreCase)))
            {
                groups.Add(group.Id);
            }
            section.SetGroups(groups.ToArray());
            await section.SaveAsync();

            return(true);
        }
        public virtual async Task <bool> CreateGroupAsync(IPermissionGroup group)
        {
            if (await GetGroupAsync(group.Id) != null)
            {
                return(false);
            }

            m_PermissionGroupsDataStore.PermissionGroups.Add(new PermissionGroupData
            {
                Priority       = group.Priority,
                Id             = group.Id,
                DisplayName    = group.DisplayName,
                Parents        = new HashSet <string>(group.Parents, StringComparer.InvariantCultureIgnoreCase),
                Permissions    = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase),
                IsAutoAssigned = group.IsAutoAssigned
            });

            await m_PermissionGroupsDataStore.SaveChangesAsync();

            return(true);
        }
        public bool RemoveGroup(IIdentity target, IPermissionGroup group)
        {
            GuardLoaded();
            GuardTarget(target);
            GuardTarget(group);

            PermissionSection section = target is IPermissionGroup
                ? (PermissionSection)GetConfigSection <GroupPermissionSection>(target, false)
                : GetConfigSection <PlayerPermissionSection>(target, false);

            if (section == null)
            {
                return(false);
            }

            List <string> groups = section.GetGroups().ToList();
            int           i      = groups.RemoveAll(c => c.Equals(group.Id, StringComparison.OrdinalIgnoreCase));

            section.SetGroups(groups.ToArray());
            section.Save();
            return(i > 0);
        }
        public async Task <bool> RemoveGroupAsync(IPermissionActor target, IPermissionGroup group)
        {
            GuardLoaded();
            GuardTarget(target);
            GuardTarget(group);

            PermissionSection section = target is IPermissionGroup
                ? (PermissionSection) await GetConfigSectionAsync <GroupPermissionSection>(target, false)
                : await GetConfigSectionAsync <PlayerPermissionSection>(target, false);

            if (section == null)
            {
                return(false);
            }

            List <string> groups = section.GetGroups().ToList();
            int           i      = groups.RemoveAll(c => c.Equals(group.Id, StringComparison.OrdinalIgnoreCase));

            section.SetGroups(groups.ToArray());
            await section.SaveAsync();

            return(i > 0);
        }
Пример #24
0
        public void Execute(ICommandContext context)
        {
            IUserInfo targetPlayer = context.Parameters.Get <IUserInfo>(0);
            string    groupName    = context.Parameters.Get <string>(1);

            string permission = "Rocket.Permissions.ManageGroups." + groupName;
            IPermissionProvider permissions = context.Container.Resolve <IPermissionProvider>("default_permissions");

            if (permissions.CheckPermission(context.User, permission) != PermissionResult.Grant)
            {
                throw new NotEnoughPermissionsException(context.User, permission,
                                                        "You don't have permissions to manage this group.");
            }

            IPermissionGroup groupToUpdate = permissions.GetGroup(groupName);

            if (groupToUpdate == null)
            {
                context.User.SendMessage($"Group \"{groupName}\" was not found.", Color.Red);
                return;
            }

            UpdateGroup(context.User, permissions, targetPlayer, groupToUpdate);
        }
 public async Task <bool> DeleteGroupAsync(IPermissionGroup group)
 {
     GuardLoaded();
     GuardTarget(group);
     return(DeleteConfigSection(group));
 }
Пример #26
0
 public Task <bool> DeleteGroupAsync(IPermissionGroup group)
 => throw new NotSupportedException("Deleting groups from proxy is not supported.");
Пример #27
0
 public Task <bool> RemoveGroupAsync(IPermissionEntity target, IPermissionGroup group)
 => throw new NotSupportedException("Removing groups from proxy is not supported.");
 public bool DeleteGroup(IPermissionGroup group)
 {
     GuardLoaded();
     GuardTarget(group);
     return(DeleteConfigSection(group));
 }
Пример #29
0
 /// <inheritdoc />
 public bool CreateGroup(IPermissionGroup group) => false;
Пример #30
0
 /// <inheritdoc />
 public bool DeleteGroup(IPermissionGroup group) => false;