У меня есть проект Laravel 5.3 с настроенным пакетом Cartalyst \ Sentinel (v2.0.15). У меня есть эта строка
$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;
}
Массив secondPermissions не пуст. Что это за «вторичные» разрешения? Я заглянул на страницу (а) документации Sentinel, но ничего не смог найти по этому поводу. Единственное, что я могу найти, — это то, что «пользователь» может иметь разрешения, но также и «роль». Моя текущая настройка базы данных заключается в том, что роли имеют разрешения, но ни один из моих пользователей не имеет каких-либо особых разрешений. Таким образом, поле «разрешения» в моей таблице пользователей всегда равно NULL.
Благодарю.
Починил это.
Проблема заключалась в том, что разрешения были неправильно сохранены в моей базе данных.
Это должно быть как:
{"controller.action": true, "controller.actionTwo": true}
Вместо:
{"controller.action: true", "controller.actionTwo: true"}
Других решений пока нет …