Symfony如何使用注解@Security

Symfony如何使用注解@Security,symfony,Symfony,我找不到任何关于如何使用symfony的注解@Security的清晰帖子。 我可以使用哪些参数?最重要的是,我如何确保控制器不受来宾的影响,并且只能由用户访问 目前我有 /** * * @Route("/reseller/create/", name="app_reseller_create", methods={"POST", "GET"}) * @IsGranted("ROLE_ADMIN&qu

我找不到任何关于如何使用symfony的注解@Security的清晰帖子。 我可以使用哪些参数?最重要的是,我如何确保控制器不受来宾的影响,并且只能由用户访问

目前我有

/**
 * 
 * @Route("/reseller/create/", name="app_reseller_create", methods={"POST", "GET"})
 * @IsGranted("ROLE_ADMIN")
     */
public function create(Request $request): Response
{
}
@同意 如果只想检查用户是否已登录,则可以使用特殊属性而不是角色。对于完整控制器,必须在类定义上设置它

/**
*@isgrated(“已完全认证”)
*/
类MyClass{
有一些特殊属性可以在任何可以使用角色的地方使用

  • 已通过身份验证\u完全
    已登录
  • 是否经过身份验证\u是否已记住
    是否已登录或具有已记住的cookie
  • 是否以匿名方式进行身份验证
    任何用户都有此权限
  • 是匿名的
    仅限来宾
  • 仅被记住
    具有rmembered cookie的用户
  • 是\u模拟者
    仅在会话中模拟其他用户的用户
Symfony 5.1中引入了
是匿名的
是记忆的
是模拟的
属性

@保安 安全注释与isgrated注释相比更加灵活,并且可以使用表达式

假设您想要一个页面,该页面只有在用户是管理员并且在其请求中具有特定令牌时才能访问

  • 通过
    @isgrated
/**
*@isgrated(“角色\管理员”,状态码=404)
*/
公共功能展示(请求$Request,Post$Post)
{
如果(!$request->request->has('privatetoken')| |'mytoken'!==$request->request->get('privatetoken')){
返回$this->createNotFoundException('notfound');
}
//展示柱
}
  • 使用
    @安全性
/**
*@Security(“已授予('ROLE\u ADMIN')和request.get('privatetoken')=='mytoken',状态码=404)
*/
公共活动展览(Post$Post)
{
//展示柱
}
这样,您必须具有管理员角色,并且在url中具有
privatetoken
参数,如
mydomain.com/post/show/?privatetoken=mytoken
,并且您不需要请求实例

表达式可以访问以下变量:

  • 令牌
    :当前安全令牌
  • user
    :当前用户对象
  • 请求
    :请求实例
  • 角色
    :用户角色
  • 和所有请求属性
有太多的可能性来发布这一切。但我认为这显示了@isgrated的不同


谢谢分享!我需要一种API方法。我想这个令牌可以使用。但是如果你有建议,我会很高兴。如果你使用API平台构建API,也是一样的。请看: