我想到了一个解决方案。
只需为该控制器多做一个fake controller 和make index action。
在这个index 操作中,我们可以拥有our own permission check,并基于此我们可以将用户重定向到我们预定义的位置。
现在 main menu 只需将 URL 指向 => myplugin/fakecontroller/index
这个controller has no permission 表示它的public,所以每个人都可以使用它。
现在在index action 中检查current user 的权限,基于此您可以select redirect url。
// in fakecontroller's index action
$redirectUrl = 'default-url';
if($this->user->hasAccess('bla-bla')) {
$redirectUrl = 'some-other-url';
}
return \Redirect::to($redirectUrl);
使用多个插件使其更加动态
为了使其更具动态性,您只需将插件的id 传递给index 操作即可。确保所有其他插件的插件 url 相同。我们只是改变id
你必须如何使用 if 语句,因为你想要自定义行为,我认为我们不能将这些信息添加到后端,如果我们尝试实现它会花费太长时间。所以,现在I have other solution 可以让multiple plugins 变得简单一些。
例如
- 对于插件-主菜单 url 可以是
myplugin/fakecontroller/index/plugin-A
- plugin-B 的主菜单 url 可以是
myplugin/fakecontroller/index/plugin-B
// fakecontroller
$pluginWiseRedirect = [
'pluginA' => [
'permission-name' => 'redirect-url-A',
'bla-bla' => 'new-url-A'
],
'pluginB' => [
'permission-name' => 'redirect-url-B',
'bla-bla' => 'new-url-B'
],
];
// in fakecontroller's index action
public function index($pluginId = 'pluginA') {
$redirectUrl = 'default-url';
$permissionName = 'permission-name';
if($this->user->hasAccess($permissionName)) {
// please make check here for key exist
$redirectUrl = $this->pluginWiseRedirect[$pluginId][$permissionName];
}
$permissionName = 'bla-bla';
if($this->user->hasAccess($permissionName)) {
// please make check here for key exist
$redirectUrl = $this->pluginWiseRedirect[$pluginId][$permissionName];
}
return \Redirect::to($redirectUrl);
}
如有任何疑问,请发表评论。