php - Laravel 自定义身份验证过滤器

标签 php laravel-4 before-filter

我已经在 Controller 中使用 Route::Intended('/') 将标准身份验证过滤器添加到多个路由(假设登录成功)。

过滤器.php:

Route::filter('auth', function(){
    if (Auth::guest()) return Redirect::guest('internal/login');
});

Controller :

if (Auth::attempt($data, false))
{
    return Redirect::intended('/');
}

我如何着手创建自定义身份验证过滤器来检查特定权限(在本例中为 isAdmin)?

我已将 auth.admin 过滤器设置为与标准身份验证过滤器相同以重定向到登录页面,但我是否需要在我的 Controller 上使用第二个登录方法,或者是否有办法判断哪个过滤器(如果有)调用了 Controller 方法?

if (Auth::attempt($data, false))
{
    if (RouteHasAdminFilter())
    {
        if (!Auth::User()->Admin)
            return Redirect::intended('/');
        else
            return Redirect::to('/');
    }
    else
    {
        return Redirect::intended('/');
    }
}

最佳答案

感谢@diegofelix让我走上正轨。

我已经设法编写了一个过滤器:

  • 提示用户输入他们的凭据
  • 非管理员用户重定向到主页
  • 允许管理员用户转到原始 URL


Route::filter('admin', function()  
{

    if (Auth::guest()) return Redirect::guest('internal/login');

    if (Auth::check())
    {
        if (!Auth::User()->Admin)
            return Redirect::to('/');
    }
    else
        return Redirect::to('/');
});

此过滤器不需要更改我的 Controller 上的登录方法,它仍然使用 Redirect::intended('/')。
这样做的关键是为管理员用户重定向,只是让代码“掉落”到原始页面,只有非管理员用户被重定向。
我还在对需要非管理员身份验证的页面使用标准的“auth”过滤器。

我的路线使用:

'before' => 'auth'
'before' => 'admin'

如果我删除管理过滤器的第一行(我从标准 auth 过滤器复制而来),我可以通过同时使用两个过滤器来获得相同的效果,如下所示:

'before' => 'auth|admin'

关于php - Laravel 自定义身份验证过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21598991/

相关文章:

php - 多维导航阵列

ruby-on-rails - 如何在多个 RSpec 上下文中使用相同的共享示例和前置过滤器?

ruby-on-rails - 在 cucumber 运行测试之前运行一次代码

php - 更改 Laravel 4 中的默认环境

laravel - Vagrant Laravel Homestead SSH 身份验证失败

CakePHP 身份验证插件重定向问题

php - 我怎样才能使这个 SQL 查询更有效率? PHP

php - Woocommerce 商店页面产品描述

php - 在MySql中插入phonegap数据

mysql - Laravel 4 远方 Eloquent 关系