我使用基于Laravel的OctoberCMS。
我在群组Matt
,owners
中有一个后端用户administrators
。
如何检查用户是否属于特定组以允许身份验证?
我被告知我需要传递一个群组对象,但我不知道那是什么。
use Auth;
use BackendAuth;
use Backend\Models\User;
if (BackendAuth::check()) {
// get current backend user
$backend_user = BackendAuth::getUser();
// get current backend user's groups
$backend_user_groups = Backend::getUser()->groups;
// authenticate
if ($backend_user->inGroup('administrators') {
}
}
错误
public function inGroup($group)
Call to a member function getKey() on string
我尝试的另一种方式
if (User::inGroup('administrators') {
}
错误
Non-static method October\Rain\Auth\Models\User::inGroup() should not be called statically
文档
https://octobercms.com/docs/backend/users
https://github.com/octobercms/library/blob/master/src/Auth/Models/User.php
答案 0 :(得分:4)
可能有一些辅助函数,但您也可以使用它:
PL/SQL
答案 1 :(得分:1)
您还可以扩展后端用户模型并向其添加帮助程序方法以检查角色。在插件的boot()
方法中执行以下操作:
use Backend\Models\User as BackendUser;
public function boot()
{
BackendUser::extend(function($model) {
$model->addDynamicMethod('hasRole', function($role) use ($model) {
return $model->groups()->whereName($role)->exists();
});
$model->addDynamicMethod('isAdmin', function() use ($model) {
return $model->hasRole('administrators');
});
}
}
答案 2 :(得分:1)
我认为首先应该在执行permissions part
公共功能inGroup($ group)
在字符串
上调用成员函数getKey()
你看看inGroup()
函数做了什么吗?此方法不期望字符串作为参数
这里有完整的功能:
/**
* See if the user is in the given group.
* @param Group $group
* @return bool
*/
public function inGroup($group)
{
foreach ($this->getGroups() as $_group) {
if ($_group->getKey() == $group->getKey()) <<== Call to a member function getKey() on string
{
return true;
}
}
return false;
}
关于第二个错误
非静态方法10月\ Rain \ Auth \ Models \ User :: inGroup()不应静态调用
您应该初始化非静态方法,如下所示:
(new User)->someMethod()