Rolix Showcase
Understanding the Building Blocks
Rolix evaluates access from three layers:
- Membership — does this person have a role in this scope?
- Role — what allow/deny lists (and ancestors) apply after rules pass?
- Permission key — does the requested string match allow, and not deny?
Super roles grant everything. Owner memberships grant everything inside one memberable context.
Multi-Tenant Workspace Example
Overview
A SaaS app has global admins and per-tenant members. Users can hold a system role and one or more tenant memberships.
1) Register a Tenant Role Type
use JobMetric\Rolix\Facades\RoleTypeRegistry;
use App\Models\Tenant;
RoleTypeRegistry::register('tenant', [
'model' => Tenant::class,
'hierarchical' => true,
'label' => 'Tenant roles',
]);
2) Create Roles
use JobMetric\Rolix\Facades\Role;
Role::store([
'type' => 'system',
'name' => 'Platform Admin',
'is_super' => true,
]);
Role::store([
'type' => 'tenant',
'name' => 'Tenant Manager',
'allow' => ['workspace.*', 'billing.view'],
'deny' => ['billing.refund'],
]);
3) Attach Traits
use JobMetric\Rolix\Traits\HasRole;
use JobMetric\Rolix\Traits\HasMembers;
class User extends Authenticatable
{
use HasRole;
}
class Tenant extends Model
{
use HasMembers;
}
4) Assign Memberships
$user->assignRole($platformAdmin); // system scope
$tenant->assignMember($user, $tenantManager);
5) Check Access
$user->hasPermission('workspace.settings', $tenant); // true for manager
$user->hasPermission('billing.refund', $tenant); // false (deny)
Gate::allows('workspace.settings', [$tenant]); // Gate before uses HasRole
6) Blade
@rolixCan('workspace.settings', $tenant)
<a href="{{ route('settings') }}">Settings</a>
@endrolixCan
Soft Delete Memberships
use JobMetric\Rolix\Facades\Membership;
Membership::destroy($membershipId); // soft delete → permission lost
Membership::restore($membershipId); // restored → permission back
Membership::forceDelete($membershipId); // permanent
Next
Dive into HasRole, HasMembers, and Gate / Middleware / Blade.