我在查找任何帮助,示例或教程时遇到了麻烦,这些帮助,示例或教程布局了如何使用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
在视图上没有任何问题的同时,控制器无法访问捆绑中的存储库又是怎么回事?