见我之前发过的pr: https://github.com/walkor/webman-framework/pull/39/files
调用控制器的action前,检测控制器是否存在约定名称的初始化方法。
靠中间件去处理,有中间件执行顺序的问题。
比如使用action-hook处理。
protected $admin;
public function beforeAction(Request $request)
{
$this->admin = session('admin_user');
if (!in_array($this->admin['role_id'], [1, 2])) {
//特殊角色处理
}
}
我另外使用了一个中间件处理权限验证,正常情况来讲,如果action-hook中间件在我中间件后面的话,
$this->admin = session('admin_user');
这句是可以拿到当前管理员用户的。
但如果action-hook
在我权限验证中间件之前执行了,用户未登录时这里直接就报错了。
如果我在这里加上if(!$this->admin){}
判断,那我另外的中间件就是多余的了,直接把权限验证放在beforeAction
里面做。
而且还会陷入一个怪圈,就是那种写个baseController
,然后其的所有控制器去继承它。
另外,别告诉我修改config/middleware.php
调整中间件顺序之类的。我写个插件做的权限验证。
等 1.4,1.4版本支持不复用控制器,到时候就可以在每个请求前执行控制器的
__construct
了