Пример #1
0
        public Task <bool> UpdatePermissionsAsync(GametekiUser user, GametekiPermissions newPermissions)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            if (newPermissions == null)
            {
                throw new ArgumentNullException(nameof(newPermissions));
            }

            return(UpdatePermissionsInternalAsync(user, newPermissions));
        }
Пример #2
0
        private async Task <bool> UpdatePermissionsInternalAsync(GametekiUser user, GametekiPermissions newPermissions)
        {
            var existingPermissions = user.ToApiUser().Permissions;
            var toAdd    = new List <string>();
            var toRemove = new List <string>();

            ProcessPermission(newPermissions.CanEditNews, existingPermissions.CanEditNews, Roles.NewsManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanManageGames, existingPermissions.CanManageGames, Roles.GameManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanManageNodes, existingPermissions.CanManageNodes, Roles.NodeManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanManagePermissions, existingPermissions.CanManagePermissions, Roles.PermissionsManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanManageUsers, existingPermissions.CanManageUsers, Roles.UserManager, toRemove, toAdd);
            ProcessPermission(newPermissions.CanModerateChat, existingPermissions.CanModerateChat, Roles.ChatManager, toRemove, toAdd);
            ProcessPermission(newPermissions.IsSupporter, existingPermissions.IsSupporter, Roles.Supporter, toRemove, toAdd);
            ProcessPermission(newPermissions.IsContributor, existingPermissions.IsContributor, Roles.Contributor, toRemove, toAdd);
            ProcessPermission(newPermissions.IsAdmin, existingPermissions.IsAdmin, Roles.Admin, toRemove, toAdd);

            foreach (var roleToAdd in toAdd)
            {
                var role = await context.Roles.SingleOrDefaultAsync(r => r.Name == roleToAdd).ConfigureAwait(false);

                if (role == null)
                {
                    continue;
                }

                user.UserRoles.Add(new GametekiUserRole {
                    Role = role, User = user
                });
            }

            foreach (var userRole in toRemove.Select(roleToRemove => user.UserRoles.Single(ur => ur.Role.Name == roleToRemove)))
            {
                user.UserRoles.Remove(userRole);
            }

            try
            {
                await context.SaveChangesAsync().ConfigureAwait(false);
            }
            catch (DbUpdateException exception)
            {
#pragma warning disable CA1303 // Do not pass literals as localized parameters
                logger.LogError(exception, "Failed updating permissions");
#pragma warning restore CA1303 // Do not pass literals as localized parameters
                return(false);
            }

            return(true);
        }