0

So I'm just starting to learn Laravel and I've implemented the Entrust Role Permission package, which works really well. Now my question is, I'd like to have a 'Dashboard' page like so: example.com/dashboard.

The thing is, I'm not sure how to set this up. Since In my App\Http\Controllers folder I made subfolders for Admin and User, they both have a Dashboardcontroller since I want to show different data for either type of user.

How can I declare a route that would point to Dashboard and check which Role the authenticated user has, then loads the correct controller? Does it have to do something with namespaces? I haven't really found a good answer yet

So trying to be more clear, I don't want to have to do this: example.com/dashboard/admin and example.com/dashboard/user, rather just one url example.com/dashboard and check which role the user has.

I'm sorry if the answer is really obvious, this stuff is new to me and I haven't found any good answer yet.

Dennis
  • 3
  • 2

1 Answers1

0

Something like this should work for you.

routes.php

Route::get('/dashboard', ['as'=>'dashboard', 'uses'=> 'DashboardController@dashboard']);

DashboardController.php

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\User;
use App\Admin;

class DashboardController extends Controller {
    public function dashboard(){
        if ($this->auth->user()->hasRole('admin') )
        {
            return $this->showAdminDashboard();
        }
        elseif ($this->auth->user()->hasRole('user') )
        {
            return $this->showUserDashboard();
        }
        else {
            abort(403);
        }
    }

    private function showUserDashboard()
    {
        return view('dashboard.user');
    }

    private function showAdminDashboard()
    {
        return view('dashboard.admin');
    }
}

Edits per comment

It sounds like something like this approach might be what you are looking for.

<?php

$uses = 'PagesController@notfound';
if( $this->auth->user()->hasRole('admin') )
{
    $uses = 'AdminController@index';
}
elseif ($this->auth->user()->hasRole('user') )
{
    $uses = 'UsersController@index';
}


Route::get('/dashboard', array(
     'as'=>'home'
    ,'uses'=> $uses
));

That said, I feel like having a DashboardController works better. I find when using a dashboard, I pull from a variety of models for the opening page to get statistics about the site. I would use the DashboardController only for this general information. From the Dashboard, I would like to other pages that have the specific items you want to view/edit. This way if the admins need to access view/edit the same information as the users, you do not need to rewrite code. You can just update the security on that particular controller to allow for both groups.

Community
  • 1
  • 1
whoacowboy
  • 6,982
  • 6
  • 44
  • 78
  • Thanks for the comment, I was indeed also aware that I could probably make a Dashboardcontroller however is that good practice? Since I'd have to make all these functions for every view I make (like for example a profile page, dashboard page, posts page, etc). They'd all have to have a showAdmin, showUser. This is why i was trying to make a single route and check the role to load a certain controller. – Dennis May 31 '15 at 11:10
  • @Dennis I updated my answer per your comments, let me know if that makes sense. – whoacowboy May 31 '15 at 18:56
  • Neat and clear answer, thank you. I will try both out and see which one suits the purpose best. Thanks again – Dennis May 31 '15 at 21:29