private void LogPermissionsChange(int roleId, IList <int> newPermissionIds, IList <int> oldPermissionIds, AuditIdentityDTO identity) { var role = _unitOfWork.RoleRepository.AsQueryable().First(x => x.Id == roleId); var oldPermissionNames = _unitOfWork.PermissionRepository.AsQueryable() .Where(x => oldPermissionIds.Contains(x.Id)) .Select(x => x.Name).ToList(); var newPermissionNames = _unitOfWork.PermissionRepository.AsQueryable() .Where(x => newPermissionIds.Contains(x.Id)) .Select(x => x.Name); _auditService.Log(new AuditEntryDTO { UserId = _connectionInfo.UserId, Action = AuditAction.RolePermissionsChanged, Category = AuditCategory.Security, Level = AuditLevel.Information, OldValue = AuditValueMessage.RolePermissionsChangedOldValues, OldValueParams = new [] { string.Join(", ", oldPermissionNames) }, NewValue = AuditValueMessage.RolePermissionsChangedNewValues, NewValueParams = new[] { string.Join(", ", newPermissionNames) }, Message = AuditMessage.RolePermissionsChanged, MessageParams = new[] { roleId.ToString(), role.Name }, Identity = identity }); }
public void SavePermissionsForRole(int roleId, List <RolePermissionDTO> rolePermissions, AuditIdentityDTO identity) { //RemoveAll is not implemented var allPermissions = _unitOfWork.RolePermissionRepository.AsQueryable().Where(rp => roleId == rp.RoleId); var oldPermissionIds = allPermissions.Select(x => x.PermissionId).ToList(); foreach (var permission in allPermissions) { _unitOfWork.RolePermissionRepository.Delete(permission); } var newPermissionIds = rolePermissions.Select(x => x.PermissionId).ToList(); if (0 < rolePermissions.Count) { foreach (var rolePermission in rolePermissions) { var newPermission = Mapper.Map <RolePermission>(rolePermission); if (newPermission.RoleId == 0) { newPermission.RoleId = roleId; } _unitOfWork.RolePermissionRepository.Add(newPermission); } } _unitOfWork.Save(); LogPermissionsChange(roleId, newPermissionIds, oldPermissionIds, identity); }