Symfony 4 получает аутентификацию с помощью cas и ролей через базу данных - PullRequest
0 голосов
/ 24 сентября 2018

У меня проблемы с поиском любой справки, примеров или учебных пособий, в которых указано, как использовать 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

Как получается, что контроллерне может получить доступ к хранилищу в комплекте, в то время как он без проблем обращается к нему?

...