Access control is not a feature you add later. In BizBlocks it is an attribute on the action, which means a screen cannot ship without someone deciding who is allowed to use it.
A permission is named in plain language on the action itself, then granted through roles that are scoped by department. The framework builds the permission catalog by reflecting over the application, so the admin screens always match the code.
Users hold roles per department, so a regional manager sees only their region.
Verification codes with attempt limits, plus account lockout and password policy.
Google, Microsoft and Facebook sign in, configured per tenant, with an extensible provider model.
Row level change history, user events, request logs and system logs, per tenant.
// The permission is part of the action
[ActionAuthorize("Manage Dispatch")]
public IActionResult Board() => View();
[ActionAuthorize("Create Invoice")]
public async Task<IActionResult> Bill(Job job)
{
ValidateDepartment(job.DeptId);
return Json(await _svc.Bill(job));
}
A company key isolates each tenant's data, with its own subdomain, branding, users and audit trail. It is how a franchise network runs every location on one deployment.
Business records carry a company key, and queries scope to the current tenant. Shared reference data lives on a global company.
Companies nest into departments, and roles and reports can be scoped down to them.
JWT tokens, refresh tokens, scoped API keys and guest tokens for portals and mobile clients.
Spin up a branded BizBlocks environment in seconds, or tell us how your business works and we will scope it with you.