我已根据命名路由为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请求期间获取路由名称?
谢谢。
答案 0 :(得分:1)
尝试在过滤后将验证码放入其中。
App::after(function($request, $response)
{
if ( ! Auth::user()->hasPermissions(Route::current()->getName()))
{
return Redirect::route('dashboard.index');
}
});