Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon How does Laratrust integrate with Laravel's policies and gates
    Laratrust Laravel policies gates authorization roles permissions middleware guards


How does Laratrust integrate with Laravel's policies and gates


Laratrust integrates with Laravel's policies and gates system in several ways:

1. Compatibility: Laratrust is designed to be compatible with Laravel's policies and gates system. This means you can use Laratrust's roles and permissions alongside Laravel's policies and gates to manage authorization in your application.

2. Role-Based Policies: Laratrust allows you to define policies based on roles. For example, you can create a policy that checks if a user has a specific role before allowing them to perform an action.

3. Permission-Based Policies: Laratrust also supports permission-based policies. You can define policies that check if a user has a specific permission before allowing them to perform an action.

4. Role and Permission Verification: Laratrust provides methods to verify if a user has a specific role or permission. These methods can be used in Laravel's policies to make authorization decisions.

5. Middleware and Guards: Laratrust supports multiple middleware and guards, which can be used to apply different authorization rules to different parts of your application. This integration with Laravel's middleware and guards system allows for flexible and fine-grained control over authorization.

Example Usage:

Here is an example of how you might use Laratrust with Laravel's policies and gates:

php
// Define a policy for the User model
namespace App\Policies;

use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class UserPolicy
{
    use HandlesAuthorization;

    public function view(User $user)
    {
        // Check if the user has the 'view-user' permission
        return $user->can('view-user');
    }

    public function edit(User $user)
    {
        // Check if the user has the 'edit-user' permission
        return $user->can('edit-user');
    }
}

// Define the User model
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Gate;

class User extends Model
{
    // Define the roles and permissions for this user
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }

    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }
}

// Define the Role model
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    // Define the permissions for this role
    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }
}

// Define the Permission model
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Permission extends Model
{
    // Define the roles that have this permission
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

// Define the routes
Route::get('/users', 'UserController@index');
Route::get('/users/{user}', 'UserController@show');
Route::put('/users/{user}', 'UserController@update');

// Define the UserController
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Policies\UserPolicy;

class UserController extends Controller
{
    public function index()
    {
        // Check if the user has the 'view-user' permission
        if (Gate::allows('view-user')) {
            // Show the list of users
        } else {
            // Show an error message
        }
    }

    public function show(User $user)
    {
        // Check if the user has the 'view-user' permission
        if (Gate::allows('view-user')) {
            // Show the user details
        } else {
            // Show an error message
        }
    }

    public function update(User $user)
    {
        // Check if the user has the 'edit-user' permission
        if (Gate::allows('edit-user')) {
            // Update the user
        } else {
            // Show an error message
        }
    }
}

Conclusion:

Laratrust integrates seamlessly with Laravel's policies and gates system, allowing you to manage roles and permissions alongside Laravel's policies and gates. This integration provides a robust and flexible way to manage authorization in your Laravel application.

Citations:
[1] https://laracasts.com/discuss/channels/laravel/laratrust-or-laravel-gates-policies
[2] https://laratrust.santigarcor.me/docs/5.0/
[3] https://github.com/santigarcor/laratrust
[4] https://laratrust.santigarcor.me
[5] https://laratrust.santigarcor.me/docs/6.x/