【问题标题】:OctoberCMS BackendAuth::getUser() return NULLOctoberCMS BackendAuth::getUser() 返回 NULL
【发布时间】:2021-03-24 05:28:10
【问题描述】:

问题: 尝试在后端获取当前经过身份验证的用户(具有一定权限的管理员),OctoberCMS 平台。 我通过自定义插件(在 boot() 方法中)扩展了一个插件,并且当用户无权访问它时,我想从菜单中删除一个 sideMenuItem . (我成功地做到了——用户无法访问该项目(拒绝访问)——但我想从 sideMenu 中删除该项目。

以下代码在 MyPlugin 中,我想扩展 OtherAuthor 插件。

public function boot()
    {
        /** Extends plugin */
        $this->otherAuthorPluginExtend();
    }


 public function registerPermissions()
    {
        return [
            /** Permissions for accessing sidemenuItems from OtherAuthor plugin */
            'author.plugin.plugin_access' => [
                'roles' => ['Developer'],
            ],
        ];
    }

public function otherAuthorPluginExtend(){

//>>>THIS NOT WORK
        $user = \Backend\Facades\BackendAuth::getUser();
var_dump($user);

    /*this hide sideMenu item based on permission level*/
          if(array_key_exists('author.plugin.plugin_access', $user->permissions)) {
    //>>>THIS WORKS FINE, but for all backend users
            Event::listen('backend.menu.extendItems', function ($manager) {
                $manager->removeSideMenuItem('OtherAuthor.Plugin', 'Plugin', 'sideMenuItem');
            });
          }
    
      //>>>THIS WORKS FINE
    /*this restrict access to that page from sideMenu*/

        \OtherAuthor\Plugin\Controllers\SideMenuItemController::extend(function ($controller){
            $controller->requiredPermissions = ['author.plugin.plugin_access'];
        });
}

为什么 $user 得到 NULL? 有其他访问方式吗?

提前谢谢你!

【问题讨论】:

    标签: octobercms


    【解决方案1】:

    事情是event在所有插件注册和用户会话开始后被调用,所以你需要做的是推送your conditional check code inside event callback

    这样就可以获取到当前后台登录的用户。 `如果您尝试将当前用户代码放在外面,可能 会话尚未初始化

    您的代码应如下所示。

    public function boot()
    {
        /** Extends plugin */
        $this->otherAuthorPluginExtend();
    }
    
    public function otherAuthorPluginExtend(){
    
        // here you can not get user
        // $user = \Backend\Facades\BackendAuth::getUser();
    
        \Event::listen('backend.menu.extendItems', function ($manager) {
            /*this hide sideMenu item based on permission level*/
            // inside event callback you can retrieve user
            $user = \Backend\Facades\BackendAuth::getUser();
            if(array_key_exists('author.plugin.plugin_access', $user->permissions)) {
                $manager->removeSideMenuItem('OtherAuthor.Plugin', 'Plugin', 'sideMenuItem');
            }
        });
    
        /*this restrict access to that page from sideMenu*/
        \OtherAuthor\Plugin\Controllers\SideMenuItemController::extend(function ($controller){
            $controller->requiredPermissions = ['author.plugin.plugin_access'];
        });
    }
    

    现在一切都应该按预期工作:)

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

    【讨论】:

    • 这是一个很好的答案。谢谢你。奇迹般有效。 \Event::listen("backend.menu.extendItems", function ($manager) { $user = \Backend\Facades\BackendAuth::getUser(); //now the user can be managed // rest of code }
    • 嗯,可以分享一些示例代码,然后我可以帮助你:)
    【解决方案2】:

    尝试在 'backend.menu.extendItems' 事件中添加用户获取

    【讨论】:

    • 这必须是最短的答案,但没有提供示例/详细信息。谢谢,但 Satasiya 先生在上面回答得很好。
    猜你喜欢
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2018-08-12
    • 2021-08-11
    • 1970-01-01
    • 2011-09-22
    • 2012-01-01
    相关资源
    最近更新 更多