Laravel Custom User Roles&基于路由的权限

时间:2014-12-15 22:27:41

标签: laravel laravel-routing

我已根据命名路由为Laravel(4.2)创建了一个自定义角色管理器,例如:

users.index, customers.create, vendors.update, orders.store, users.edit, customers.update, etc.

基本上在routes.php文件中注册为Route::resource(...);的任何内容(带有一些自定义命名路由)

我正在使用此方法检查权限:

namespace Acme\Users;

...

class User extends \Eloquent implements UserInterface, RemindableInterface {

    ...

    public function hasPermissions($route)
    {
        $actions = ['users.index', 'users.create', 'users.edit', 'users.delete']; // fake data
        if ( ! in_array($route, $actions))
        {
            return false;
        }
        return true;
    }
}

然后,在app/filters.php内,我正在检查用户的当前路线。

Route::filter('auth', function()
{
    if (Auth::guest())
    {
        if (Request::ajax())
        {
            return Response::make('Unauthorized', 401);
        }
        else
        {
            return Redirect::guest('login');
        }
    }

    // check if the current authenticated User has permissions to access this route
    if ( ! Auth::user()->hasPermissions(Route::current()->getName())) 
    {   
        return Redirect::route('dashboard.index');
    }
});

使用GET方法的所有路径都可以使用,但是当涉及到PUT,PATCH,POST DELETE时,Route::current()->getName()不会返回任何内容。

有更好的方法吗?我希望一切都能自动发生,我有一个解决这个问题的方法,但它非常复杂。有没有办法在PUT,PATCH,POST或DELETE请求期间获取路由名称?

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试在过滤后将验证码放入其中。

App::after(function($request, $response)
{
    if ( ! Auth::user()->hasPermissions(Route::current()->getName())) 
    {   
        return Redirect::route('dashboard.index');
    }
});