【问题标题】:Check if Backend User belongs to Group with OctoberCMS Laravel?检查后端用户是否属于使用 OctoberCMS Laravel 的组?
【发布时间】:2017-07-23 06:07:54
【问题描述】:

我正在使用基于 Laravel 的 OctoberCMS

我有一个后端用户,Matt 在群组中ownersadministrators

如何检查用户是否属于特定组以允许身份验证?

有人告诉我需要传递一个组对象,但我不知道那是什么。

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

【问题讨论】:

  • 您是否有理由检查组而不是权限?
  • @dragontree 在OctoberCMS 中,我创建了拥有一组权限的后端用户组。我将用户添加到管理员或版主,然后在 php 中检查当前用户的组以允许访问某个功能。我应该换一种方式吗?
  • 您应该为此使用hasAccesshasPermission() 函数。它记录在这里:octobercms.com/docs/backend/users#features
  • 我在我制作的一个自定义组件上使用了认证组,我不确定我是否知道如何为该组件设置权限。
  • registerPermissions() 函数示例在文档的同一页上给出。像这样注册权限后,它们将显示在后端组页面中,您可以在其中添加或删除组或用户。

标签: php laravel laravel-5 octobercms


【解决方案1】:

可能有一些辅助函数,但你也可以使用它:

$backend_user->groups()->whereName('administrators')->exists();

【讨论】:

  • 我认为它可能有效,我正在做一些测试,我会尽快回复您。
  • 这适用于检测组。接下来我必须做权限,谢谢。
【解决方案2】:

您还可以扩展后端用户模型并为其添加辅助方法来检查角色。在插件的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');
        });

    }
}

【讨论】:

    【解决方案3】:

    我认为首先你应该在执行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;
    }
    

    关于第二个错误

    不应静态调用非静态方法 October\Rain\Auth\Models\User::inGroup()

    你应该像这样初始化非静态方法:

    (new User)->someMethod() 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 2012-12-26
      • 1970-01-01
      相关资源
      最近更新 更多