예제 #1
0
        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
            });
        }
예제 #2
0
        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);
        }