Ejemplo n.º 1
0
        public async Task <IEditPermissionViewModel <TRole, TViewModel> > GetEditPermissionViewModel <TRole, TViewModel>(string userId, string roleId) where TViewModel : class, new()
        {
            var user = await _userRepository.GetAsync(userId);

            var userRolePermissions = user.Roles.FirstOrDefault(ur => ur.RoleId == roleId).Role.Permissions;

            var model = new EditPermissionViewModel
            {
                UserId = userId,
                Role   = _roleRepository.Get(roleId),
                RoleId = roleId
            };

            var allPermissions = await _permissionManagerFacade.GetAll();

            model.Permissions = allPermissions.Select(p => new IdentityPermissionViewModel
            {
                Description = p.Description,
                Id          = p.Id,
                Name        = p.Name,
                IsSelected  = userRolePermissions.Select(rp => rp.PermissionId).Contains(p.Id)
            });

            return(model as IEditPermissionViewModel <TRole, TViewModel>);
        }
Ejemplo n.º 2
0
        public async Task <IdentityResult> UpdateRolePermissions <TViewModel>(IEditPermissionViewModel <IdentityRole, TViewModel> model)
            where TViewModel : IIdentityPermissionViewModel
        {
            try
            {
                var selectedPermissions   = model.Permissions.Where(ip => ip.IsSelected);
                var unSelectedPermissions = model.Permissions.Where(ip => !ip.IsSelected);
                var role            = Get(model.RoleId);
                var rolePermissions = role.Permissions;

                var permissionsToAdd = selectedPermissions
                                       .Where(p => !rolePermissions.Select(rp => rp.PermissionId).Contains(p.Id));

                var permissionsToDelete = unSelectedPermissions
                                          .Where(p => rolePermissions.Select(rp => rp.PermissionId).Contains(p.Id));

                var allPermissions = await _permissionManager.GetAll();

                foreach (var permissionToAdd in permissionsToAdd)
                {
                    var permission = allPermissions.FirstOrDefault(p => p.Id == permissionToAdd.Id);
                    await _permissionManager.AddToRole(permission, role.Id);
                }
                foreach (var permissionToDelete in permissionsToDelete)
                {
                    var permission = allPermissions.FirstOrDefault(p => p.Id == permissionToDelete.Id);
                    await _permissionManager.RemoveFromRole(permission, role.Id);
                }

                return(IdentityResult.Success);
            }
            catch (Exception ex)
            {
                return(new IdentityResult(ex.Message));
            }
        }