octobercms - OctoberCMS BackendAuth::getUser() 返回 NULL
问题描述
问题: 尝试在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?是另一种访问方式吗?
先感谢您!
解决方案
一旦所有插件注册并且用户会话开始,就会调用这个东西event
,所以你需要做的是 push 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'];
});
}
现在一切都应该按预期工作:)
如有任何疑问,请发表评论。
推荐阅读
- azure - 无法访问 LUIS 门户
- kubernetes - 我们如何在我的 k8s 集群中修改 docker0 mtu?
- c# - 如何将 local.settings.json 从 azure 函数移植到 .NET 核心 Web 项目?
- ios - 是否可以对 iOS 框架进行代码分析?
- javascript - 如何将画布编辑的图像数据获取到 HTML 输入字段?
- google-play-console - Google Play 控制台发出安全警报 - 易受攻击
- c++ - 将基类静态转换为派生指针并构造派生成员
- powershell - 如何在powershell中排除选定文件的列表
- postgresql - 无法将 NodeJs 应用程序与在 Minikube 中运行的 Postgres 连接
- python - `with` 与简单变量赋值(neo4j 驱动程序)上的 linter 错误