Symfony 4通过数据库获得cas和角色的身份验证

时间:2018-09-24 09:57:36

标签: symfony roles cas

我在查找任何帮助,示例或教程时遇到了麻烦,这些帮助,示例或教程布局了如何使用CAS进行授权,但是从Symfony 4的本地数据库中加载角色。

我设法通过CAS进行了身份验证:祈祷。我设法通过实体和存储库成功地从数据库中获取角色。但是事实是我没有设法在两者之间建立联系。

这是我的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

prayno捆绑包下的获得身份验证的功能和角色:

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);

代替:     $ roles = ['ROLE_USER'];

在我的loadbyUsername函数中。

问题似乎来自此行:

$entities = $this->getDoctrine()->getRepository(FscDroitsBundle::class)->findRights($netid);

错误是:调用成员函数has()为null

在视图上没有任何问题的同时,控制器无法访问捆绑中的存储库又是怎么回事?

0 个答案:

没有答案