Symfony 4 安全重定向取决于用户类型
Posted
技术标签:
【中文标题】Symfony 4 安全重定向取决于用户类型【英文标题】:Symfony 4 Security Redirect depending user type 【发布时间】:2020-10-24 21:11:43 【问题描述】:我正在做一个网站,这个网站将有两种类型的用户“客户”(customers)和“员工”(员工) 这两个类都在扩展我的用户类:
我的客户类
/**
* @ORM\Entity(repositoryClass="App\Repository\ClientRepository")
*/
class Client extends User
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $client_fonction;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ClientEmployee", mappedBy="client_id")
*/
private $client_id;
/**
* @ORM\ManyToOne(targetEntity=Site::class, inversedBy="clients")
*/
private $site;
我的员工班级
/**
* @ORM\Entity(repositoryClass="App\Repository\EmployeRepository")
*/
class Employe extends User
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $portablePro;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Agence", inversedBy="agence_id")
* @ORM\JoinColumn(nullable=false)
*/
private $agence_spie_id;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ClientEmployee", mappedBy="employe_id")
*/
private $employe_id;
这是我在用户类中的继承映射:
/**
* @ORM\Entity(repositoryClass=UserRepository::class)
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap("Employe"="Employe", "Client"="Client")
*/
abstract class User implements UserInterface
我正在寻找方法: 如果用户是“客户”-> 重定向到 /client 路由 如果用户是“雇员” -> 重定向到 /admin 路由。
在我的 security.yaml 中,我设置了 2 个提供者:
providers:
chain_provider:
chain:
providers: [app_employe_provider, app_client_provider]
app_employe_provider:
entity:
class: App\Entity\EmployeSpie
property: email
app_client_provider:
entity:
class: App\Entity\Client
property: email
role_hierarchy:
ROLE_CUSTOMER:
ROlE_IA :
ROLE_ADV :
ROLE_CM :
ROLE_RT :
ROLE_ADMIN:
ROLE_SUPER_ADMIN: ROLE_ADMIN
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- path: ^/admin, roles: ROLE_ADMIN
- path: ^/client, roles: ROLE_CUSTOMER
如何在我的 LoginFormAuthenticator 中,根据用户的类型重定向用户?
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey))
return new RedirectResponse($targetPath);
// For example : return new RedirectResponse($this->urlGenerator->generate('some_route'));
throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
【问题讨论】:
【参考方案1】:由于令牌作为参数传递,因此您可以从那里提取用户(类型)。
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
$user = $token->getUser();
if($user instanceof Employe)
// Do one thing
else if($user instanceof Client)
// Do other thing.
【讨论】:
以上是关于Symfony 4 安全重定向取决于用户类型的主要内容,如果未能解决你的问题,请参考以下文章