/// <summary> /// Assigns a role to a report /// </summary> /// <param name="reportName">The report name</param> /// <param name="roleName">The role name</param> /// <param name="constraints">The parameter constraints</param> public void AssignRoleToReport ( string reportName, string roleName, params ReportParameterConstraintConfiguration[] constraints ) { Validate.IsNotNull(constraints); var assigned = _assignmentRepository.IsRoleAssigned ( reportName, roleName ); if (assigned) { throw new InvalidOperationException ( $"The role '{roleName}' has already been assigned to '{reportName}'." ); } var assignment = new ReportRoleAssignment ( reportName, roleName, constraints ); _assignmentRepository.AddAssignment(assignment); _unitOfWork.SaveChanges(); }
/// <summary> /// Constructs the report parameter constraint with the details /// </summary> /// <param name="assignment">The role assignment</param> /// <param name="configuration">The constraint configuration</param> internal ReportParameterConstraint ( ReportRoleAssignment assignment, ReportParameterConstraintConfiguration configuration ) { Validate.IsNotNull(assignment); this.Id = Guid.NewGuid(); this.Assignment = assignment; Configure(configuration); }
/// <summary> /// Auto assigns multiple roles to multiple reports /// </summary> /// <param name="assignments">The assignment configurations</param> public void AutoAssignRolesToReports ( params ReportRoleAssignmentConfiguration[] assignments ) { Validate.IsNotNull(assignments); var changesMade = false; foreach (var configuration in assignments) { var reportNames = configuration.ReportNames; var roleNames = configuration.RoleNames; if (reportNames == null || reportNames.Length == 0) { throw new InvalidOperationException ( "At least one report name must be specified for assignments." ); } if (roleNames == null || roleNames.Length == 0) { throw new InvalidOperationException ( "At least one role name must be specified for assignments." ); } foreach (var reportName in reportNames) { foreach (var roleName in roleNames) { var constraints = configuration.Constraints; var assigned = _assignmentRepository.IsRoleAssigned ( reportName, roleName ); if (assigned) { var assignment = _assignmentRepository.GetAssignment ( reportName, roleName ); assignment.SetParameterConstraints ( constraints ); _assignmentRepository.UpdateAssignment ( assignment ); changesMade = true; } else { var assignment = new ReportRoleAssignment ( reportName, roleName, constraints ); _assignmentRepository.AddAssignment ( assignment ); changesMade = true; } } } } if (changesMade) { _unitOfWork.SaveChanges(); } }