Laravel / Lumen:如何授权Controller访问?

时间:2017-10-31 16:46:53

标签: php laravel authorization lumen

这是我的第一个Laravel / Lumen项目,因此我的知识还不是最好的。

我的路线:

$router->group(['prefix' => 'rest/v1','middleware' => 'auth'], function($router) {
    $router->get('articles','ArticleController@index');

    $router->get('article/{id}','ArticleController@getarticle');
});

我的控制器:

class ArticleController extends Controller{
    public function index(){
        if(!CapabilityService::currentUserCan('fetch_basic_content')) {
            return response('Insufficient permissions.', 401);
        }
        return response()->json(Article::all());
    }

    public function getArticle($id){
        if(!CapabilityService::currentUserCan('fetch_basic_content')) {
            return response('Insufficient permissions.', 401);
        }
        return response()->json(Article::find($id));
    }
}

这当然非常麻烦,特别是因为它与访问Controller中的所有功能的权限相同。但是,我必须使用自定义CapabilityService来检查权限。我怎样才能更好地实现这一点?

1 个答案:

答案 0 :(得分:1)

您可以通过创建新的中间件来实现。

$router->group(['prefix' => 'rest/v1','middleware' => ['auth','your-custom-middleware']], function($router) {
    $router->get('articles','ArticleController@index');

    $router->get('article/{id}','ArticleController@getarticle');
});

现在,在您的中间件handle方法中执行类似

的操作
if(!CapabilityService::currentUserCan('fetch_basic_content')) {
            return response('Insufficient permissions.', 401);
        }
return $next($request);