检查后端用户是否属于使用OctoberCMS Laravel的Group?

时间:2017-03-03 08:07:13

标签: php laravel laravel-5 octobercms

我使用基于Laravel的OctoberCMS

我在群组Mattowners中有一个后端用户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

3 个答案:

答案 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()