Баунсер не получает способности при входе в систему через кастомную охрану. - PullRequest
0 голосов
/ 07 ноября 2019

Я использую JosephSilber / bouncer Пакет Laravel

Когда я захожу как супер-админ, у которого есть все способности '*', и я запускаю

dump(Auth::user()->getAbilities())

На глобальном уровне (где создается этот пользователь) я получаю это:

enter image description here

и на уровне арендатора я запускаю ту же команду, когда яя вошел в систему с тем же пользователем: и я получаю пустую коллекцию

enter image description here

Это похоже на то, что она не выглядит в правильной таблице БД

и что еще интереснее, когда я делаю то же самое с ролями => Auth::user()->getRoles() Он правильно получает роли на обоих уровнях (глобальном и арендаторе)

Может быть, у кого-то больше опыта работы с Bouncer? Почему это не работает так же, как и с ролями.


Обновление:

Я наконец нашел причину и причину этой проблемы в своем приложении. Поскольку у меня мультитенантное приложение, и мой пользователь сохранен в другой БД, Bouncer ищет возможности в текущей БД, но эти способности хранятся в БД, прошедшей проверку подлинности, и поэтому ничего не находит ...

Мне просто нужнопереписать этот метод:

Silber\Bouncer\Database\Queries\Abilities.php

public static function forAuthority(Model $authority, $allowed = true)
{
    return Models::ability()->where(function ($query) use ($authority, $allowed) {
        $query->whereExists(static::getRoleConstraint($authority, $allowed));
        $query->orWhereExists(static::getAuthorityConstraint($authority, $allowed));
        $query->orWhereExists(static::getEveryoneConstraint($allowed));
    });
}

но я не знаю, как и где написать код.

Это строка, мне нужноположить туда

return Models::ability()->on($authority->getConnectionName())->where(function ($query) use ($authority, $allowed).....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...