Skip to Content
Permissions

Permissions

Arkan ERP uses role-based access control (RBAC) combined with feature gating to control what users can see and do.

Roles

Four roles are available, assigned per company:

RoleDescriptionTypical Use
OwnerFull access, can manage billing and delete the organizationFounder, CEO
AdminFull access to all modules and settings within a companyDepartment heads, IT
MemberCan create and edit records in enabled modulesRegular employees
ViewerRead-only access to all enabled modulesExternal stakeholders, auditors

Role Comparison

PermissionOwnerAdminMemberViewer
View recordsYesYesYesYes
Create/edit recordsYesYesYesNo
Delete recordsYesYesLimitedNo
Manage membersYesYesNoNo
Manage company settingsYesYesNoNo
Manage billingYesNoNoNo
Delete organizationYesNoNoNo
Access all companiesYesPer assignmentPer assignmentPer assignment

Feature Gating

The platform uses 92 feature flags to control access to functionality based on the subscription plan. Features are gated at the API level using the @RequireFeature() decorator.

How It Works

@RequireFeature('accounting') @Controller('accounting') export class AccountingController { // All routes in this controller require the 'accounting' feature }

If a user’s plan does not include the feature, the API returns 403 Forbidden.

Pricing Tiers

TierExample Features
FreeProjects (up to 3), basic boards
StarterUnlimited projects, CRM, basic reports
ProfessionalAccounting, HR, Inventory, advanced reports
BusinessMulti-company, AI insights, API access, custom fields
EnterpriseSSO, audit logs, dedicated support, custom integrations

Feature Flag Categories

CategoryCountExamples
Core12Projects, boards, work items
CRM8Leads, deals, pipeline, proposals
Accounting15GL, invoicing, bank reconciliation, fixed assets
HR14Payroll, leave, attendance, recruitment
Inventory10Warehouses, stock moves, barcode, valuation
Projects Advanced8Sprints, Gantt, OKRs, client portals
Platform12Multi-company, AI insights, API, webhooks
Admin13Audit logs, SSO, custom fields, branding
Total92

The @RequireFeature Decorator

The @RequireFeature() decorator can be applied at the controller or route level:

// Gate an entire controller @RequireFeature('hr') @Controller('hr') export class HrController { } // Gate a specific route @Controller('projects') export class ProjectsController { @RequireFeature('sprints') @Post(':id/sprints') createSprint() { } }

The decorator checks the active company’s subscription plan against the feature flag. This is enforced server-side — the frontend hides gated features from the UI, but the API is the source of truth.

Multi-Company Permissions

Users can have different roles in different companies. See Multi-Company for details on how company access is managed.

API Endpoints

MethodPathDescription
GET/membersList members in the current company
POST/members/inviteInvite a new member
PATCH/members/:id/roleChange a member’s role
DELETE/members/:idRemove a member
GET/featuresList feature flags and their status
Last updated on