Add Accountant role and CanManageBills/CanManageAccounting permissions
- AppConstants: add Accountant to CompanyRoles; add CanManageBills and CanManageAccounting to Policies - ApplicationUser: add CanManageBills and CanManageAccounting bool fields - UserManagementDtos: expose new fields in all three DTOs - ClaimsPrincipalFactory: emit ManageBills and ManageAccounting claims - Program.cs: add CanManageBills and CanManageAccounting policies; update CanManageInvoices, CanViewReports, CanManagePurchaseOrders, and CanManageVendors to auto-pass for Accountant role - BillsController: replace CanManageInventory with CanManageBills on all write actions (correct policy — bills are not inventory) - BankReconciliationsController: replace CanManageJobs with CanManageAccounting on write actions - CompanyUsersController: add Accountant to validCompanyRoles (both Create/Edit), legacyRole switch, and all permission assignment blocks - Create/Edit views: add Accountant option to role dropdown; add CanManageBills and CanManageAccounting checkboxes; JS auto-checks financial permissions when Accountant role is selected - Migration AddAccountantRolePermissions: adds columns + backfills CanManageBills=1 and CanManageAccounting=1 for all CompanyAdmin users Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -277,6 +277,7 @@ public class CompanyUsersController : Controller
|
||||
{
|
||||
AppConstants.CompanyRoles.CompanyAdmin,
|
||||
AppConstants.CompanyRoles.Manager,
|
||||
AppConstants.CompanyRoles.Accountant,
|
||||
AppConstants.CompanyRoles.Worker,
|
||||
AppConstants.CompanyRoles.Viewer
|
||||
};
|
||||
@@ -329,7 +330,9 @@ public class CompanyUsersController : Controller
|
||||
CanManageVendors = forceAllPermissions || model.CanManageVendors,
|
||||
CanManageMaintenance = forceAllPermissions || model.CanManageMaintenance,
|
||||
CanManageInvoices = forceAllPermissions || model.CanManageInvoices,
|
||||
CanViewReports = forceAllPermissions || model.CanViewReports
|
||||
CanViewReports = forceAllPermissions || model.CanViewReports,
|
||||
CanManageBills = forceAllPermissions || model.CanManageBills,
|
||||
CanManageAccounting = forceAllPermissions || model.CanManageAccounting
|
||||
};
|
||||
|
||||
var result = await _userManager.CreateAsync(user, model.Password);
|
||||
@@ -341,6 +344,7 @@ public class CompanyUsersController : Controller
|
||||
{
|
||||
AppConstants.CompanyRoles.CompanyAdmin => AppConstants.Roles.Administrator,
|
||||
AppConstants.CompanyRoles.Manager => AppConstants.Roles.Manager,
|
||||
AppConstants.CompanyRoles.Accountant => AppConstants.Roles.Employee,
|
||||
AppConstants.CompanyRoles.Worker => AppConstants.Roles.Employee,
|
||||
_ => AppConstants.Roles.ReadOnly
|
||||
};
|
||||
@@ -454,7 +458,9 @@ public class CompanyUsersController : Controller
|
||||
CanManageVendors = user.CanManageVendors,
|
||||
CanManageMaintenance = user.CanManageMaintenance,
|
||||
CanManageInvoices = user.CanManageInvoices,
|
||||
CanViewReports = user.CanViewReports
|
||||
CanViewReports = user.CanViewReports,
|
||||
CanManageBills = user.CanManageBills,
|
||||
CanManageAccounting = user.CanManageAccounting
|
||||
};
|
||||
|
||||
ViewBag.ReturnUrl = returnUrl;
|
||||
@@ -538,6 +544,7 @@ public class CompanyUsersController : Controller
|
||||
{
|
||||
AppConstants.CompanyRoles.CompanyAdmin,
|
||||
AppConstants.CompanyRoles.Manager,
|
||||
AppConstants.CompanyRoles.Accountant,
|
||||
AppConstants.CompanyRoles.Worker,
|
||||
AppConstants.CompanyRoles.Viewer
|
||||
};
|
||||
@@ -608,6 +615,8 @@ public class CompanyUsersController : Controller
|
||||
user.CanManageMaintenance = forceAllPermissions || model.CanManageMaintenance;
|
||||
user.CanManageInvoices = forceAllPermissions || model.CanManageInvoices;
|
||||
user.CanViewReports = forceAllPermissions || model.CanViewReports;
|
||||
user.CanManageBills = forceAllPermissions || model.CanManageBills;
|
||||
user.CanManageAccounting = forceAllPermissions || model.CanManageAccounting;
|
||||
user.UpdatedAt = DateTime.UtcNow;
|
||||
|
||||
var result = await _userManager.UpdateAsync(user);
|
||||
|
||||
Reference in New Issue
Block a user