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>); }
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)); } }