dojs
dojs

Reputation: 517

Laravel RBAC (Role Based Access Control) Model Relationship

I'm making my own role based access control implementation and need some help on a relationship question.

I have a User, Group and a Permission model, there's a pivot table between User / Group and between Group / Permission. How would I most efficiently retrieve the Permission model through the User model?

Thank you.

Edit:

Relationship is as follows;

User belongsToMany Group Group belongsToMany User

Group belongsToMany Permission Permission belongsToMany Group

Upvotes: 1

Views: 1815

Answers (1)

The Alpha
The Alpha

Reputation: 146191

According to your Pivot Tables relations are as follows:

Group <-> User has many-to-many

Group <-> Permission has many-to-many

How would I most efficiently retrieve the Permission model through the User model

Since there is no direct relationship between User and Permission model but you can get all the permissions through Group model:

$user = User::with('groups.permissions')->find(1);

This will give you the User model with all Group models and nested Permission models so to get permissions you may try:

// Get a collection
$permissionsOfFirstGroup = $user->groups->first()->permissions;
// Get a collection
$permissionsOfSecondGroup = $user->groups->get(1)->permissions;

To get all permissions from all the groups you may try this:

$permissions = $user->groups->fetch('permissions');

This will return you a Illuminate\Database\Eloquent\Collection object (A Collection of Permission models).

There are other ways (Using joins) but depends on your need how you do it.

Upvotes: 2

Related Questions