0

我有一个配置了 Cartalyst\Sentinel (v2.0.15) 包的 Laravel 5.3 项目。我有这条线

$hasPermission = Sentinel::getUser()->hasAccess($routeName);

但我不断收到此错误消息:

Argument 2 passed to 
Cartalyst\Sentinel\Permissions\StandardPermissions::prepare Permissions() must be of the type array, null given

我查看了 Google 和包的 github 页面,但找不到任何可以帮助我解决这个问题的东西。

当我查看包的源代码时,我看到了这段代码:

/**
 * {@inheritDoc}
 */
protected function createPreparedPermissions()
{
    $prepared = [];

    // $this->secondaryPermissions equals to:
    // [
    //     0 => NULL,
    // ]
    if (! empty($this->secondaryPermissions)) {
        foreach ($this->secondaryPermissions as $permissions) {
            // this is the line where it throws the error as $permissions == NULL
            $this->preparePermissions($prepared, $permissions);
        }
    }

    if (! empty($this->permissions)) {
        $permissions = [];

        $this->preparePermissions($permissions, $this->permissions);

        $prepared = array_merge($prepared, $permissions);
    }

    return $prepared;
}

secondaryPermissions 数组不为空。这些“次要”权限是什么?我查看了 Sentinel 的文档页面,但找不到任何相关信息。我唯一能找到的是“用户”可以拥有权限,但“角色”也可以。我当前的数据库设置是角色具有权限,但我的用户都没有任何特定权限。所以我的用户表中的“权限”字段总是等于 NULL。

谢谢。

4

1 回答 1

1

修复。问题是权限错误地存储在我的数据库中。

它应该是这样的:

{"controller.action": true, "controller.actionTwo": true}

代替:

{"controller.action: true", "controller.actionTwo: true"}
于 2017-10-02T08:59:51.040 回答