У меня проблемы с поиском любой справки, примеров или учебных пособий, в которых указано, как использовать CAS для авторизации, но я загружаю роли из локальной базы данных в Symfony 4.
Мне удалось пройти проверку подлинности через CAS с помощью пакета:prayno.Мне удается успешно получать роли из базы данных через сущность и репозиторий.Но дело в том, что мне не удалось установить связь между двумя.
Вот мой security.yaml:
security:
# https://symfony.com/doc/current/security.html#where-do-users-come-from- user-providers
providers:
cas:
id: prayno.cas_user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
logout: ~
guard:
authenticators:
- prayno.cas_authenticator
Функция в комплекте с прайно для получения аутентификации иРоли:
public function loadUserByUsername($username)
{
if ($username) {
$password = '...';
$salt = "";
$roles = ['ROLE_USER'];
return new CasUser($username, $password, $salt, $roles);
}
throw new UsernameNotFoundException(
sprintf('Username "%s" does not exist.', $username)
);
}
Оттуда я пытался получить свои роли из базы данных, используя контроллер, который я создал для этого случая:
<?php
namespace App\Controller;
use App\Entity\FscDroitsBundle;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class RightsController extends AbstractController
{
/**
* @Route("/rights", name="rights")
*/
public function attribute_rights($netid)
{
$entities = $this->em->getDoctrine()->getRepository(FscDroitsBundle::class)->findRights($netid);
$rights_array = array('ROLE_USER');
foreach ($entities as $data) {
array_push($rights_array, $data->getBundle());
}
return $rights_array;
}
Но до сих пор я не нашеллюбой способ использовать этот контроллер в комплекте, что-то вроде:
$rights = new RightsController();
$roles = $rights->attribute_rights($username);
вместо: $ role = ['ROLE_USER'];
в моей функции loadbyUsername.
Проблема, похоже, исходит из этой строки:
$entities = $this->getDoctrine()->getRepository(FscDroitsBundle::class)->findRights($netid);
Ошибка: вызов функции-члена имеет () значение NULL
Как получается, что контроллерне может получить доступ к хранилищу в комплекте, в то время как он без проблем обращается к нему?