Case study · Al-Raddawi ERP
A permission model built around a real company
Al-Raddawi Contracting & Oil Services is a Syrian contractor working since 1997 across oil and gas, power and infrastructure. I designed and built the internal management system for its teams.

The problem
The company runs many departments and advisory units side by side: accounting and budgeting, human resources, general services, cost control, tax advisory, payroll and social insurance, and more. Each has its own manager, its own people and its own services.
A plain role system answers one question: what can this person do? A company like this needs a second answer as well: where can they do it? An HR clerk may view employee records, but only for the units they actually serve. And nobody should ever end up with company-wide access by accident.
Architecture
A Vue 3 single-page app talks to an ASP.NET Core API on .NET 8. Every request passes through authentication, then the permission and scope engine, before it reaches the business logic and SQL Server through Entity Framework Core.
Two layers of permission
Access is decided in two layers that never mix their jobs:
- Action permissions come from roles and answer what: view employees, approve an advance, send a general message.
- Scope assignments answer where. They attach to one specific account or to everyone in a role group, and limit an existing permission to chosen units.
Three rules the engine never breaks. A scope assignment never grants a new action, it only narrows one that already exists. An explicit deny always wins over any allow. And company-wide access is never implicit: it has to be granted on purpose.
In simplified form, every check reads like this:
bool CanAccess(User user, string action, Unit target)
{
if (Denies(user, action, target)) return false; // explicit deny wins
if (!HasAction(user, action)) return false; // what
if (!ScopeCovers(user, action, target)) return false; // where
return true;
}

The organization as data
Departments, advisory units and units live in one tree. Each node knows its employees, its child units and its manager, and publishes the services other people can request from it, such as employee advances, general messages, or direct and indirect cost entries. The same tree drives the scope engine, so permissions follow the real structure of the company.
The system also supports an acting general manager, so authority can be delegated cleanly when the general manager is away.
Details that matter to the people using it
- Full Arabic and English interface with right-to-left layout, switchable at any time.
- Light and dark themes.
- Workspace search and a "how to use this page" guide on complex screens.
- A sign-in screen and wording made for the company's own teams.

Stack
Need a system shaped around how your company actually works? I build them, and I can run the servers they live on.
Talk to me on LinkedIn