回答您的评论,您可以尝试使用 Symfony2 身份验证:
在控制器中使用命名空间:UsernamePasswordToken:
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
从数据库中检索您的角色并将其存储在 $aRoleNameToken 中
$aRoleNameToken = array('ROLE_ADMIN','ROLE_USER');
如果认证成功则设置令牌:
$token = new UsernamePasswordToken($username, null,'secured_area',$aRoleNameToken);
$this->get('security.context')->setToken($token);
在视图中,您可以检查该角色是否已分配给当前用户:
(http://symfony.com/doc/2.8/security.html)
{% if is_granted('ROLE_ADMIN') %}
<a href="...">Delete</a>
{% endif %}
退出操作:
/**
* @Route("/logout", name="logout")
*/
public function logoutAction() {
$this->get('security.token_storage')->setToken(null);
$this->get('request')->getSession()->invalidate();
return new RedirectResponse($this->generateUrl('login'));
}
在 security.yml 文件中,您可以对会话进行一些配置。
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: [ROLE_ADMIN] }
- { path: ^/home, roles: [ROLE_ADMIN,ROLE_USER] }
- { path: ^/login, roles: [ROLE_ADMIN,ROLE_USER]}
- { path: /, roles: [ROLE_ADMIN,ROLE_USER]}
如您所见 ^/login 的值为 'IS_AUTHENTICATED_ANONYMOUSLY',这意味着登录页面是您唯一可以在没有身份验证的情况下看到的页面,如果您尝试访问另一个路径,例如 '/home' 或 ' /admin' 并且您没有 autenticathion(之前在您的登录操作中设置),您将被重定向到登录页面。
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
比如下一句表示你必须有角色ROLE_ADMIN,如果你想访问路径:/admin
- { path: ^/admin, roles: [ROLE_ADMIN] }