Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
785b22d
[AB#30415] Add zone-type attribute to manually bypass toggle checks
plavoie-BC Aug 20, 2026
1e7ec70
[AB#30415] Refactor Applicant Management permissions hierarchy
plavoie-BC Aug 24, 2026
02bd6d0
[AB#30415] Apply Applicant Management Zones
plavoie-BC Aug 24, 2026
1b9b5ca
[AB#30415] Add Applicant List Permission
plavoie-BC Aug 24, 2026
256a7da
[AB#30415] Add Applicant History Permission and Zones
plavoie-BC Aug 24, 2026
8b32d38
[AB#30415] Update Applicant History AppService Permissions
plavoie-BC Aug 24, 2026
0cb5b18
[AB#30415] Add Applicant Info Zones
plavoie-BC Aug 24, 2026
c7d1a55
[AB#30415] Add Applicant Contact Permission Restrictions
plavoie-BC Aug 24, 2026
563e6cf
[AB#30415] Add Applicant Address Zones and Authroization
plavoie-BC Aug 24, 2026
b38fdd7
[AB#30415] Add Delete Applicant Authroization
plavoie-BC Aug 24, 2026
83f44cf
[AB#30415] Add Applicant Merge Authorization
plavoie-BC Aug 24, 2026
bff8247
Merge remote-tracking branch 'origin/dev' into feature/AB#30415-modul…
plavoie-BC Aug 24, 2026
7a50c29
[AB#30415] Fix SonarQube Issue
plavoie-BC Aug 24, 2026
8697b8d
Revert "[AB#30415] Fix SonarQube Issue" and preserve intended changes
plavoie-BC Aug 24, 2026
3296ebe
[AB#30415] Move Assign Applicant for Application Management
plavoie-BC Aug 25, 2026
e355914
[AB#30415] Normalize Applicant Management Hierarchy
plavoie-BC Aug 25, 2026
a945967
[AB#30415] Update Applicant Management Zones
plavoie-BC Aug 25, 2026
5c0e09b
Merge remote-tracking branch 'origin/dev' into feature/AB#30415-modul…
plavoie-BC Aug 25, 2026
9b31805
[AB#30415] Remove unused applicant management permissions
plavoie-BC Aug 25, 2026
1f3d8f8
[AB#30415] Code quality improvements
plavoie-BC Aug 26, 2026
044a699
[AB#30415] Fix applicant merge permissions
plavoie-BC Aug 26, 2026
231cdfb
Merge branch 'dev' into feature/AB#30415-modular-applicant-permission…
plavoie-BC Aug 26, 2026
7e0e293
[AB#30415] Add Applicant widget read permission policies
plavoie-BC Aug 26, 2026
7182ac8
[AB#30415] Update Applicant Supplier Lookup Logic for merges
plavoie-BC Aug 26, 2026
3b0d08a
[AB#30415] Resolve null red-stop bug
plavoie-BC Aug 26, 2026
8244991
Merge remote-tracking branch 'origin/dev' into feature/AB#30415-modul…
plavoie-BC Aug 26, 2026
cacb5bd
[AB#30415] ApplicantOrganizationInfo Save Button Bugfix
plavoie-BC Aug 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -778,7 +778,7 @@ $(function () {

const safeApplicantName = $.fn.dataTable.render.text().display(applicantName);

if (type === 'display' && abp.auth.isGranted('GrantApplicationManagement.Applicants.ViewList')) {
if (type === 'display' && abp.auth.isGranted('Unity.GrantManager.ApplicantManagement.Applicant')) {
const applicantId = row?.applicantId;
const isGuid = applicantId && guidPattern.test(applicantId);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
namespace Unity.Modules.Shared;

public static partial class UnitySelector
{
public static partial class ApplicantManagement
{
public const string Default = "Unity.GrantManager.ApplicantManagement";


public static partial class Applicant
{
// Default includes View Applicants List
public const string Default = "Unity.GrantManager.ApplicantManagement.Applicant";
public const string Update = "Unity.GrantManager.ApplicantManagement.Applicant.Update";
public const string Delete = "Unity.GrantManager.ApplicantManagement.Applicant.Delete";
public const string Merge = "Unity.GrantManager.ApplicantManagement.Applicant.Merge";
}

public static partial class ApplicantInfo
{
public const string Default = "Unity.GrantManager.ApplicantManagement.ApplicantInfo";
public const string Update = "Unity.GrantManager.ApplicantManagement.ApplicantInfo.Update";
public const string Update_RedStop = "Unity.GrantManager.ApplicantManagement.ApplicantInfo.Update.RedStop";

public static partial class OrganizationInfo
{
public const string Default = "Unity.GrantManager.ApplicantManagement.ApplicantInfo.OrganizationInfo";
public const string Update = "Unity.GrantManager.ApplicantManagement.ApplicantInfo.OrganizationInfo.Update";
}
}

public static partial class Contacts
{
public const string Default = "Unity.GrantManager.ApplicantManagement.Contacts";
public const string Create = "Unity.GrantManager.ApplicantManagement.Contacts.Create";
public const string Update = "Unity.GrantManager.ApplicantManagement.Contacts.Update";
public const string Delete = "Unity.GrantManager.ApplicantManagement.Contacts.Delete";
}

public static partial class Addresses
{
public const string Default = "Unity.GrantManager.ApplicantManagement.Addresses";
public const string Create = "Unity.GrantManager.ApplicantManagement.Addresses.Create";
public const string Update = "Unity.GrantManager.ApplicantManagement.Addresses.Update";
public const string Delete = "Unity.GrantManager.ApplicantManagement.Addresses.Delete";
}

public static partial class Payments
{
public const string Default = "Unity.GrantManager.ApplicantManagement.Payments";
public const string EditSupplierInfo = "Unity.GrantManager.ApplicantManagement.Payments.EditSupplierInfo";
}

public static partial class History
{
public const string Default = "Unity.GrantManager.ApplicantManagement.History";

public static partial class FundingHistory
{
public const string Default = "Unity.GrantManager.ApplicantManagement.History.Funding";
public const string Update = "Unity.GrantManager.ApplicantManagement.History.Funding.Update";
}

public static partial class AuditHistory
{
public const string Default = "Unity.GrantManager.ApplicantManagement.History.Audit";
public const string Update = "Unity.GrantManager.ApplicantManagement.History.Audit.Update";
}

public static partial class IssueHistory
{
public const string Default = "Unity.GrantManager.ApplicantManagement.History.Issue";
public const string Update = "Unity.GrantManager.ApplicantManagement.History.Issue.Update";
}

public static partial class ReportsHistory
{
public const string Default = "Unity.GrantManager.ApplicantManagement.History.Report";
public const string Update = "Unity.GrantManager.ApplicantManagement.History.Report.Update";
}
}

public static partial class Comments
{
public const string Default = "Unity.GrantManager.ApplicantManagement.Comments";
public const string Create = "Unity.GrantManager.ApplicantManagement.Comments.Create";
}

public static partial class Attachments
{
public const string Default = "Unity.GrantManager.ApplicantManagement.Attachments";
public const string Upload = "Unity.GrantManager.ApplicantManagement.Attachments.Upload";
public const string EditLabel = "Unity.GrantManager.ApplicantManagement.Attachments.EditLabel";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
[System.Diagnostics.CodeAnalysis.SuppressMessage("Critical Code Smell", "S3218:Inner class members should not shadow outer class \"static\" or type members", Justification = "Constants File")]
public static partial class UnitySelector
{
public static partial class Applicant
{
public static partial class Summary // ApplicantInfo
{
public const string Update_AssignApplicant = "Unity.GrantManager.ApplicationManagement.Applicant.Summary.Update.AssignApplicant";
}
}

public static partial class Review
{
public static partial class Approval
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
using System.Collections.Generic;

namespace Unity.GrantManager.ApplicantProfile;

public class SaveApplicantHistoryNotesDto
{
public List<string> ModifiedFields { get; set; } = [];
public string? FundingHistoryComments { get; set; }
public string? IssueTrackingComments { get; set; }
public string? AuditComments { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,6 @@ public override void Define(IPermissionDefinitionContext context)
// Application
grantApplicationPermissionsGroup.AddPermission(GrantApplicationPermissions.Applications.Default, L("Permission:GrantApplicationManagement.Applications.Default"));

// Applicant
var applicatPermissions = grantApplicationPermissionsGroup.AddPermission(GrantApplicationPermissions.Applicants.Default, L("Permission:GrantApplicationManagement.Applicants.Default"));
applicatPermissions.AddChild(GrantApplicationPermissions.Applicants.ViewList, L("Permission:GrantApplicationManagement.Applicants.ViewList"));
applicatPermissions.AddChild(GrantApplicationPermissions.Applicants.Edit, L("Permission:GrantApplicationManagement.Applicants.Edit"));
applicatPermissions.AddChild(GrantApplicationPermissions.Applicants.AssignApplicant, L("Permission:GrantApplicationManagement.Applicants.AssignApplicant"));
applicatPermissions.AddChild(GrantApplicationPermissions.Applicants.Delete, L("Permission:GrantApplicationManagement.Applicants.Delete"));
var applicantInfoPermissions = applicatPermissions.AddChild(
GrantApplicationPermissions.Applicants.ApplicantInfoDefault,
L("Permission:GrantApplicationManagement.Applicants.ApplicantInfo"));
applicantInfoPermissions.AddChild(
GrantApplicationPermissions.Applicants.EditRedStop,
L("Permission:GrantApplicationManagement.Applicants.ApplicantInfo.EditRedStop"));

// Assignment
var assignmentPermissions = grantApplicationPermissionsGroup.AddPermission(GrantApplicationPermissions.Assignments.Default, L("Permission:GrantApplicationManagement.Assignments.Default"));
assignmentPermissions.AddChild(GrantApplicationPermissions.Assignments.AssignInitial, L("Permission:GrantApplicationManagement.Assignments.AssignInitial"));
Expand Down Expand Up @@ -123,6 +110,9 @@ public override void Define(IPermissionDefinitionContext context)
var tagsPermissionsGroup = context.AddGroup("Tags", L("Permission:Tags"));
tagsPermissionsGroup.AddPermission(UnitySelector.Application.Tags.Create, L(UnitySelector.Application.Tags.Create));
tagsPermissionsGroup.AddPermission(UnitySelector.Application.Tags.Delete, L(UnitySelector.Application.Tags.Delete));

//-- GRANT APPLICANT MANAGEMENT PERMISSIONS
context.AddGrantApplicantManagement_Permissions();
}

private static LocalizableString L(string name)
Expand Down Expand Up @@ -178,6 +168,7 @@ public static void AddApplication_ApplicantInfo_Permissions(this PermissionGroup

var upx_Applicant_Summary = upx_Applicant.AddUnityChild(UnitySelector.Applicant.Summary.Default);
var upx_Applicant_Summary_Update = upx_Applicant_Summary.AddUnityChild(UnitySelector.Applicant.Summary.Update);
var upx_Applicant_Summary_Update_Assign = upx_Applicant_Summary_Update.AddUnityChild(UnitySelector.Applicant.Summary.Update_AssignApplicant);

var upx_Applicant_Contact = upx_Applicant.AddUnityChild(UnitySelector.Applicant.Contact.Default);
var upx_Applicant_Contact_Create = upx_Applicant_Contact.AddUnityChild(UnitySelector.Applicant.Contact.Create);
Expand All @@ -195,6 +186,39 @@ public static void AddApplication_ApplicantInfo_Permissions(this PermissionGroup
#endregion
}

public static void AddGrantApplicantManagement_Permissions(this IPermissionDefinitionContext context)
{
#region APPLICANT MANAGEMENT GRANULAR PERMISSIONS
var group = context.AddGroup(UnitySelector.ApplicantManagement.Default, L("Permission:GrantApplicantManagement"));

var upx_Applicant = group.AddPermission(UnitySelector.ApplicantManagement.Applicant.Default, L(UnitySelector.ApplicantManagement.Applicant.Default));
upx_Applicant.AddUnityChild(UnitySelector.ApplicantManagement.Applicant.Update);
upx_Applicant.AddUnityChild(UnitySelector.ApplicantManagement.Applicant.Delete);
upx_Applicant.AddUnityChild(UnitySelector.ApplicantManagement.Applicant.Merge);

var upx_ApplicantInfo = group.AddPermission(UnitySelector.ApplicantManagement.ApplicantInfo.Default, L(UnitySelector.ApplicantManagement.ApplicantInfo.Default));
var upx_ApplicantInfo_Update = upx_ApplicantInfo.AddUnityChild(UnitySelector.ApplicantManagement.ApplicantInfo.Update);
upx_ApplicantInfo_Update.AddUnityChild(UnitySelector.ApplicantManagement.ApplicantInfo.Update_RedStop);
upx_ApplicantInfo.AddUnityChild(UnitySelector.ApplicantManagement.ApplicantInfo.OrganizationInfo.Update);


var upx_Contacts = group.AddPermission(UnitySelector.ApplicantManagement.Contacts.Default, L(UnitySelector.ApplicantManagement.Contacts.Default));
upx_Contacts.AddUnityChild(UnitySelector.ApplicantManagement.Contacts.Update);


var upx_Addresses = group.AddPermission(UnitySelector.ApplicantManagement.Addresses.Default, L(UnitySelector.ApplicantManagement.Addresses.Default));
upx_Addresses.AddUnityChild(UnitySelector.ApplicantManagement.Addresses.Update);

var upx_Payments = group.AddPermission(UnitySelector.ApplicantManagement.Payments.Default, L(UnitySelector.ApplicantManagement.Payments.Default));

var upx_History = group.AddPermission(UnitySelector.ApplicantManagement.History.Default, L(UnitySelector.ApplicantManagement.History.Default));
upx_History.AddUnityChild(UnitySelector.ApplicantManagement.History.FundingHistory.Update);
upx_History.AddUnityChild(UnitySelector.ApplicantManagement.History.AuditHistory.Update);
upx_History.AddUnityChild(UnitySelector.ApplicantManagement.History.IssueHistory.Update);
upx_History.AddUnityChild(UnitySelector.ApplicantManagement.History.ReportsHistory.Update);
Comment thread
plavoie-BC marked this conversation as resolved.
#endregion
}

public static PermissionDefinition AddUnityChild(this PermissionDefinition parent, string name)
{
return parent.AddChild(name, LocalizableString.Create<GrantManagerResource>(name));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Unity.GrantManager.ApplicantProfile.ProfileData;
using Unity.GrantManager.Contacts;
using Unity.Modules.Shared;
Expand All @@ -21,14 +21,14 @@ public class ApplicantContactAppService(
private const string ApplicantEntityType = "Applicant";

/// <inheritdoc />
[Authorize(UnitySelector.Applicant.Contact.Default)]
[Authorize(UnitySelector.ApplicantManagement.Contacts.Default)]
public virtual Task<ApplicantContactInfoDto> GetByApplicantIdAsync(Guid applicantId)
{
return applicantContactQueryService.GetByApplicantIdAsync(applicantId);
}

/// <inheritdoc />
[Authorize(UnitySelector.Applicant.Contact.Update)]
[Authorize(UnitySelector.ApplicantManagement.Contacts.Update)]
public virtual async Task<ContactDto> UpdateAsync(Guid applicantId, Guid contactId, UpdateApplicantContactDto input)
{
ArgumentNullException.ThrowIfNull(input);
Expand Down Expand Up @@ -64,7 +64,7 @@ public virtual async Task<ContactDto> UpdateAsync(Guid applicantId, Guid contact
}

/// <inheritdoc />
[Authorize(UnitySelector.Applicant.Contact.Update)]
[Authorize(UnitySelector.ApplicantManagement.Contacts.Update)]
public virtual async Task<bool> SetPrimaryAsync(Guid applicantId, Guid contactId)
{
await contactManager.SetPrimaryAsync(ApplicantEntityType, applicantId, contactId);
Expand Down
Loading
Loading