Laravel 4 中的角色特定登录

Posted

技术标签:

【中文标题】Laravel 4 中的角色特定登录【英文标题】:Role specific login in Laravel 4 【发布时间】:2013-09-01 13:28:00 【问题描述】:

我登录成功了,但是 我希望角色为“管理员”的用户只能转到所有路线,而角色为“经理”的用户可以转到“主页”和“GetDocumentDetails”,否则其他登录用户将被限制在主页和访客到登录页面。 我的路由和过滤文件如下:


路线:

Route::post('/login', function()

    $user = array(
    'username' => Input::get('username'),
    'password' => Input::get('password'));
    // verify user credentials  
    if (Auth::attempt($user,true))
       
        $role= Auth::user()->userrole;
        return Redirect::route('home');
    

// Route for getting document details using get method
Route::get('GetDocumentDetailsById',array('as'=>'GetDocumentDetailsById','uses'=>'DocumentController@GetDocumentDetailsById'));

// Route for guest user 
Route::filter('guest', function()

    if (Auth::check()) 
    return Redirect::route('home')->with('flash_notice', 'You are already logged in!');
    // Redirect Log-in user to his home page
);

过滤器:

/* Filter to redirect guest user to login page */
Route::filter('auth', function()

    $role=Auth::user();
    if (Auth::guest()) return Redirect::guest('login');
);


Route::filter('auth.basic', function()

    return Auth::basic('username');
);

Route::filter('guest', function()

    if (Auth::check()) return Redirect::to('/');
);

【问题讨论】:

【参考方案1】:

我建议为此使用 Zizaco 的 Entrust 和 Confide 包,因为它们大大简化了这项任务。

安装这两个包后,按照这些页面上的教程进行操作,然后您可以通过定义路由权限过滤器或常规路由过滤器来限制对某些路由的访问。控制器动作中不需要任何额外的逻辑。

这些路由权限过滤器可以很容易地定义如下:

// Any route under admin is only accessible by users with role Admin.
// Redirect happens if user doesn't have this role.

Entrust::routeNeedsRole('admin*', 'Admin', Redirect::to('/'));

基于权限的路由过滤器如下所示:

Route::filter('myFilter', function()

    if (!Entrust::can('get_document_details') )
    
        return Redirect::to('/');
    
);

然后可以将此过滤器应用于任何路由。有关更多示例和功能,请参阅 Entrust 文档。 Entrust 真是多才多艺。

【讨论】:

在给定的链接中,它写了运行 Composer 更新命令 $ composer update 我如何以及在哪里运行它?在命令提示符下我已经写了这个,但它显示“无法识别的程序” 如果你已经安装了 Laravel 4,你可能已经通过 Composer 安装了。转到您的 Laravel 根文件夹(包含一个名为 composer.json 的文件的文件夹)并运行命令“php path/to/composer.phar update”。 当我在命令提示符下写 php artisan entrust:migration 然后,错误来了 'Zizaco\Entrust\EntrustFacade' 文件未找到。我在 config/app.php 的提供者和别名数组中添加了这一行 试试php /path/to/composer.phar dump-autoload。这将使 Laravel “看到”新安装的类。 我已经转储自动加载先生,但仍然是同样的错误。我想问一下,在composer.json的'require'中包含文件名后,文件会自动下载还是我需要手动下载。

以上是关于Laravel 4 中的角色特定登录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.2 Eloquent 获取特定用户和特定角色

在 Laravel 中登录多个角色后重定向

laravel 在角色上使用 eloquent 驱动程序进行身份验证

如何将控制器中的 Laravel 4.2 beforeFilter 转换为 Laravel 5.2 中的自定义中间件

Laravel:注销特定用户

Laravel:登录后的空白页面,然后检查角色