Skip to main content
Version: Next

Identity & access management

Identity & Access Management (IAM) is the security foundation of Makronexus. It controls who can sign in, what they can do, and which resources they can access. The system implements Role-Based Access Control (RBAC) with Attribute-Based Access Control (ABAC) policies for fine-grained authorization.


Foundation → Identity & Access (segment: foundation/iam)

Sub-sectionPathDescription
Usersfoundation/iam/usersUser account management
Rolesfoundation/iam/rolesRole definitions and assignments
Permissionsfoundation/iam/permissionsAction-level access control
Policiesfoundation/iam/policiesABAC conditional rules
Resourcesfoundation/iam/resourcesProtected resource instances

IAM architecture

┌─────────────────────────────────────────────────────────────────────────┐
│ Identity & Access Management │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Users │───→│ Roles │───→│ Permissions │ │
│ │ (Identities)│ │ (Bundles) │ │ (resource.action) │ │
│ └──────────────┘ └──────────────┘ └──────────────────────────┘ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────┐ │ │
│ │ │ Policies │←────────────────┘ │
│ │ │ (ABAC Rules)│ │
│ │ └──────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ Resource Grants │ │
│ │ (User → Resource Instance → Permitted Actions) │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Part 1: Users

Users are login identities that access the system through email/username authentication.

User properties

FieldTypeDescription
idstringUnique identifier
tenantIdstringTenant association
emailstringPrimary email (login)
usernamestringOptional username
phonestringContact phone
firstNamestringFirst name
lastNamestringLast name
displayNamestringDisplay name
emailVerifiedbooleanEmail confirmed
authProviderenumAuthentication method
isActivebooleanAccount active status
rolesarrayAssigned roles
lastLoginAtdatetimeLast successful login
lockedUntildatetimeAccount lock expiry
loginAttemptsnumberFailed login count

Authentication providers

ProviderDescription
localEmail/password authentication
googleGoogle OAuth
microsoftMicrosoft/Azure AD
samlEnterprise SAML SSO
ldapLDAP/Active Directory

User management actions

ActionDescriptionPermission
CreateAdd new userusers.create
ViewView user detailsusers.view
EditUpdate user profileusers.update
DeleteRemove user accountusers.delete
ActivateEnable user accessusers.activate
DeactivateDisable user accessusers.deactivate
UnlockRemove account lockusers.unlock
Reset passwordTrigger password resetusers.reset_password

Bulk user operations

OperationDescription
activateBulk activate users
deactivateBulk deactivate users
suspendBulk suspend users
unlockBulk unlock accounts
deleteBulk delete users
verify_emailBulk verify emails
reset_passwordBulk password reset
assign_roleBulk role assignment
remove_roleBulk role removal
update_org_unitBulk org unit change

Creating a user

  1. Navigate to Foundation → Identity & Access → Users
  2. Click Add User
  3. Fill required fields:
    • Email (required)
    • First name, Last name
    • Authentication provider
  4. Optional: Assign roles immediately
  5. Optional: Send welcome email
  6. Save user

Part 2: Roles

Roles bundle permissions into reusable access profiles that can be assigned to users.

Role properties

FieldTypeDescription
idstringUnique identifier
tenantIdstringTenant scope
namestringRole name
descriptionstringRole purpose
isSystembooleanSystem-defined role
isActivebooleanRole active status
permissionCountnumberAssigned permissions
userCountnumberUsers with this role
assignmentCountnumberTotal assignments

System roles

System roles are predefined and cannot be deleted:

RoleDescription
Super AdminFull system access
Tenant AdminFull tenant access
School AdminSchool-level administration
TeacherTeaching and grading
BursarFinancial operations
RegistrarStudent records
GuardianParent/guardian portal
StudentStudent self-service

Role management actions

ActionDescription
Create roleDefine new role
Edit roleUpdate role details
Delete roleRemove custom role
Clone roleDuplicate role
Assign permissionsAdd permissions to role
Remove permissionsRemove permissions from role
Assign to userGive user this role

Role assignment properties

FieldDescription
roleIdRole being assigned
userIdUser receiving role
organizationUnitIdScope (school, department)
assignedByAdmin who assigned
assignedAtAssignment timestamp
expiresAtOptional expiry date
isActiveAssignment status

Creating a role

  1. Navigate to Foundation → Identity & Access → Roles
  2. Click Create Role
  3. Enter role name and description
  4. Select permissions to include
  5. Save role

Assigning a role to a user

  1. Navigate to user profile or role details
  2. Click Assign Role / Add User
  3. Select user or role
  4. Optionally set organization scope
  5. Optionally set expiry date
  6. Save assignment

Part 3: Permissions

Permissions are granular action authorizations in the format resource.action.

Permission structure

permission = resource + "." + action

Examples:
- students.create → Create student records
- students.view → View student data
- students.update → Edit student data
- students.delete → Delete student records
- finance.view → View financial data
- finance.payments → Process payments
- reports.export → Export reports

Permission properties

FieldTypeDescription
idstringUnique identifier
namestringPermission name
resourcestringResource category
actionstringAction type
descriptionstringPurpose description
isSystembooleanSystem-defined
roleCountnumberRoles using this
userCountnumberUsers with this

Common resource categories

ResourceDescription
studentsStudent records
teachersStaff records
usersUser accounts
rolesRole management
permissionsPermission management
financeFinancial module
admissionsAdmissions module
attendanceAttendance tracking
gradebooksGrade management
reportsReport generation
analyticsAnalytics dashboards
auditAudit logs
settingsSystem settings

Common actions

ActionDescription
viewRead access
createCreate new records
updateModify existing records
deleteRemove records
exportExport data
importImport data
approveApprove workflows
manageFull management

Permission check result

PropertyDescription
allowedAccess granted
sourceHow permission was granted
SourceDescription
directAssigned directly to user
roleInherited from role
systemSystem-level access

Part 4: Policies (ABAC)

Policies implement Attribute-Based Access Control for conditional, context-aware authorization.

Policy properties

FieldTypeDescription
idstringUnique identifier
namestringPolicy name
descriptionstringPolicy purpose
versionnumberPolicy version
isActivebooleanPolicy status
resourcestringTarget resource
actionstringTarget action
effectenumAllow or deny
conditionobjectEvaluation rules
prioritynumberEvaluation order
tagsarrayClassification tags

Policy effects

EffectDescription
allowGrant access when conditions match
denyBlock access when conditions match

Condition operators

OperatorDescriptionExample
andAll conditions must matchUser is admin AND resource is active
orAny condition can matchUser is owner OR user is admin
notNegationUser is NOT suspended
equalsExact matchstatus == "active"
notEqualsNot equalrole != "guest"
containsString containsemail contains "@school.edu"
inValue in listrole in ["admin", "manager"]
notInValue not in liststatus notIn ["deleted", "archived"]
greaterThanNumeric comparisonbalance > 0
lessThanNumeric comparisonattempts < 5
greaterThanOrEqualNumeric comparisongrade >= 60
lessThanOrEqualNumeric comparisonage <= 18

Policy evaluation context

ContextDescription
SubjectUser making the request
ResourceObject being accessed
ActionOperation being performed
EnvironmentTime, location, etc.

Example policy

{
"name": "School Admin Own School Only",
"description": "School admins can only manage their own school",
"resource": "schools",
"action": "update",
"effect": "allow",
"condition": {
"operator": "equals",
"attribute": "subject.schoolId",
"comparison": "resource.id"
},
"priority": 100
}

Creating a policy

  1. Navigate to Foundation → Identity & Access → Policies
  2. Click Create Policy
  3. Enter name and description
  4. Select target resource and action
  5. Choose effect (allow/deny)
  6. Define conditions
  7. Set priority
  8. Save policy

Part 5: Resources and grants

Resources represent protected objects, and grants control access to specific instances.

Resource categories

CategoryDescription
coreCore system resources
organizationOrganizational units
securitySecurity resources
dataData resources
systemSystem resources
customCustom resources

Resource type definition

PropertyDescription
typeResource type identifier
nameHuman-readable name
descriptionResource description
categoryResource category
moduleOwning module
permissionsAvailable permissions
isHierarchicalSupports hierarchy
isSystemSystem-defined

Resource instances

PropertyDescription
idInstance ID
resourceTypeType reference
resourceIdExternal ID
displayNameDisplay name
descriptionInstance description
parentIdParent instance (hierarchy)
isActiveActive status

Grants

Grants link users to specific resource instances with permitted actions:

Grant = User + Resource Instance + Actions

How access control works

Request flow

User Request


┌─────────────────┐
│ 1. Authenticate │ ← Verify identity
└────────┬────────┘


┌─────────────────┐
│ 2. Load Context │ ← User, roles, policies
└────────┬────────┘


┌─────────────────┐
│ 3. Check Perms │ ← Role-based permissions
└────────┬────────┘


┌─────────────────┐
│ 4. Eval Policies│ ← ABAC conditions
└────────┬────────┘


┌─────────────────┐
│ 5. Check Grants │ ← Resource-specific
└────────┬────────┘


ALLOW / DENY

UI enforcement

The system enforces access at multiple layers:

LayerEnforcement
NavigationMenu items hidden if no access
TabsTabs hidden if no module access
ButtonsDisabled if action not permitted
FieldsRead-only if no edit permission
APIRequests rejected if unauthorized

Permissions required

ActionRequired permission
View usersusers.view
Create usersusers.create
Edit usersusers.update
Delete usersusers.delete
View rolesroles.view
Manage rolesroles.manage
View permissionspermissions.view
Manage permissionspermissions.manage
View policiespolicies.view
Manage policiespolicies.manage

Best practices

User management

  • Use unique email addresses per user
  • Deactivate (don't delete) departing staff
  • Review inactive accounts quarterly
  • Enforce strong passwords

Role design

  • Create roles based on job functions
  • Use principle of least privilege
  • Don't grant more access than needed
  • Review role assignments regularly

Permission assignment

  • Prefer role-based over direct assignment
  • Document custom permission grants
  • Audit permission changes monthly

Policy management

  • Test policies in development first
  • Use meaningful names and descriptions
  • Set appropriate priorities
  • Document policy decisions

Troubleshooting

Missing buttons or tabs

Cause: Permission not granted Fix: Check user's roles and permissions

"Access denied" error

Cause: Multiple possibilities

  • No permission for action
  • Wrong school selected
  • Policy blocking access
  • Session expired

Fix:

  1. Verify school selection
  2. Check role assignments
  3. Review applicable policies
  4. Re-authenticate if needed

User cannot sign in

Cause: Multiple possibilities

  • Account deactivated
  • Account locked
  • Password expired
  • MFA not configured

Fix:

  1. Check isActive status
  2. Check lockedUntil field
  3. Reset password if needed
  4. Configure MFA if required

Role not taking effect

Cause: Assignment not active Fix: Verify assignment is active and not expired