【问题标题】:Menu of navigation in backend - OctoberCMS后台导航菜单 - OctoberCMS
【发布时间】:2020-07-22 11:02:14
【问题描述】:

我有一个问题,但我还没有找到解决方案,如果我不能明确我的问题,我深表歉意,但请按照以下说明操作。

10 月份,当我创建导航菜单时,父菜单强制我采取路线,但是,很多时候用户无法获得某个页面的权限,如下图所示。

可能的解决方案: 创建一个路由并在其中放置几个​​“ifs”来重定向用户,这样做的问题是每个插件的工作都非常重复......

我的问题是,我如何创建一个路由来自动识别用户目前拥有的权限并以动态方式为每个插件重定向到正确的页面?

或者我指出的解决方案是唯一的方法?

【问题讨论】:

    标签: php laravel octobercms octobercms-plugins octobercms-backend


    【解决方案1】:

    我想到了一个解决方案。

    只需为该控制器多做一个fake controllermake 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 变得简单一些。

    例如

    1. 对于插件-主菜单 url 可以是 myplugin/fakecontroller/index/plugin-A
    2. 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);
    }
    

    如有任何疑问,请发表评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2017-05-23
      相关资源
      最近更新 更多