Search code examples
phplaravelrolesmiddleware

How can i manage controller methods as per user role in laravel?


public function __construct()
{
    $this->middleware('roles:Author')->only(['index','show','create']);
    $this->middleware('roles:User')->only(['index','show']);
}

In my controller i want access methods as per users role for e.g if user role is admin then he has to access all methods of controller, if user role is Author then he has access of index,create and show method and if role is User then he has only access of index and show method.


Solution

  • You can take a look at Gates (docs).

    In your App\Providers\AuthServiceProvider add:

    Gate::define('create-post', function ($user) {
        return $user->isAuthor(); //Here you should check the users role
    });
    

    And then in your controller's method create():

    if (Gate::allows('create-post')) {
        // The current user can create posts...
    }
    

    The other two methods: index() and show() are available to both roles so there's no action required.