3.0 KiB
3.0 KiB
Authorization Update Guide for Existing Controllers
Overview
All existing controllers need to be updated with appropriate authorization policies to work with the multi-tenancy system.
Required Changes
1. Add Authorization Attribute to Controllers
Add the [Authorize(Policy = "CanViewData")] attribute to all existing controllers:
- CustomersController
- JobsController
- QuotesController
- InventoryController
- EquipmentController
- MaintenanceController
- ShopFloorController
- ReportsController
- SettingsController
Example:
[Authorize(Policy = "CanViewData")]
public class CustomersController : Controller
{
// ... controller code
}
2. Add Policy-Specific Authorization to Actions
For actions that require elevated permissions, add specific policies:
Create/Edit/Delete Actions:
[Authorize(Policy = "CanManageJobs")]
public async Task<IActionResult> Create()
{
// ... action code
}
Management Actions:
[Authorize(Policy = "CompanyAdminOnly")]
public async Task<IActionResult> AdminPanel()
{
// ... action code
}
Available Policies
- SuperAdminOnly - Platform administrators only
- CompanyAdminOnly - Company administrators (and SuperAdmin)
- CanManageJobs - Users who can manage jobs
- CanManageUsers - Users who can manage other users
- CanViewData - All authenticated users
Controller-Specific Recommendations
CustomersController
- Index/Details:
[Authorize(Policy = "CanViewData")] - Create/Edit/Delete:
[Authorize(Policy = "CanManageJobs")]or createCanManageCustomerspolicy
JobsController
- Index/Details:
[Authorize(Policy = "CanViewData")] - Create/Edit/Delete:
[Authorize(Policy = "CanManageJobs")]
QuotesController
- Index/Details:
[Authorize(Policy = "CanViewData")] - Create: Check
CanCreateQuotespermission - Approve: Check
CanApproveQuotespermission
InventoryController
- Index/Details:
[Authorize(Policy = "CanViewData")] - Create/Edit/Delete: Check
CanManageInventorypermission
EquipmentController & MaintenanceController
- Index/Details:
[Authorize(Policy = "CanViewData")] - Create/Edit/Delete:
[Authorize(Policy = "CanManageJobs")]
ReportsController
- All actions:
[Authorize(Policy = "CanViewData")]
SettingsController
- All actions:
[Authorize(Policy = "CompanyAdminOnly")]
Testing Authorization
After adding authorization, test:
- As Viewer: Should only be able to view, no create/edit/delete buttons
- As Worker: Should be able to edit assigned jobs
- As Manager: Should have full job management
- As CompanyAdmin: Should be able to manage users
- As SuperAdmin: Should see all companies' data
Notes
- The global query filters in
ApplicationDbContexthandle data isolation automatically - No code changes needed in methods - filtering happens at the database level
- SuperAdmin can bypass filters using
.IgnoreQueryFilters()when needed - Always test cross-company access to ensure data isolation works correctly