如何确保您的应用程序的服务或方法吗

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何确保您的应用程序的服务或方法吗

在安全的文章中,你可以看到如何安全控制器通过请求security.authorization_checker服务从服务容器和检查当前用户的角色:

1 2 3 4 5 6 7 8 9
/ /……使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException;公共函数helloAction(美元的名字){美元- >denyAccessUnlessGranted (“ROLE_ADMIN”);/ /……}

你也可以安全任何服务通过注射security.authorization_checker服务。对于一般的介绍将依赖项注入服务看到服务容器篇文章。例如,假设您有一个欧宝平台是合法的吗NewsletterManager类,发送电子邮件和你想进行限制,使其仅用于用户一些ROLE_欧宝平台是合法的吗NEWSLETTER_ADMIN的角色。你添加安全之前,类是这样的:

1 2 3 4 5 6 7 8 9 10 11 12
/ / src / AppBund欧宝平台是合法的吗le /通讯/ NewsletterManager.php名称空间AppBundle\欧宝平台是合法的吗通讯;欧宝平台是合法的吗NewsletterManager{公共函数send欧宝平台是合法的吗Newsletter(){/ /……你在哪里工作}/ /……}

你的目标是检查时用户的角色send欧宝平台是合法的吗Newsletter ()方法被调用。第一步是注入security.authorization_checker服务的对象。因为它不会有意义执行安全检查,这是一个理想的候选人构造函数注入,保证授权检查的对象内可用欧宝平台是合法的吗NewsletterManager类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src / AppBund欧宝平台是合法的吗le /通讯/ NewsletterManager.php/ /……使用ob娱乐下载\组件\安全\核心\授权\AuthorizationCheckerInterface;欧宝平台是合法的吗NewsletterManager{受保护的美元authorizationChecker;公共函数__construct(AuthorizationCheckerInterface美元authorizationChecker){美元- >authorizationChecker =美元authorizationChecker;}/ /……}

然后在你的服务配置,您可以注入服务:

  • YAML
  • XML
  • PHP
1 2 3 4 5
# app / config / services.yml服务:欧宝平台是合法的吗newsletter_manager:类:AppBundle 欧宝平台是合法的吗\通讯\ NewsletterManager参数:(“@security.authorization_checker”)

注射服务可以用来执行时的安全检查send欧宝平台是合法的吗Newsletter ()调用方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25日26日
名称空间AppBundle\欧宝平台是合法的吗通讯;使用ob娱乐下载\组件\安全\核心\授权\AuthorizationCheckerInterface;使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException;/ /……欧宝平台是合法的吗NewsletterManager{受保护的美元authorizationChecker;公共函数__construct(AuthorizationCheckerInterface美元authorizationChecker){美元- >authorizationChecker =美元authorizationChecker;}公共函数send欧宝平台是合法的吗Newsletter(){如果(= = =美元- >authorizationChecker- >isGranted (“ROLE_欧宝平台是合法的吗NEWSLETTER_ADMIN”)){AccessDeniedException ();}/ /……}/ /……}

如果当前用户没有ROLE_欧宝平台是合法的吗NEWSLETTER_ADMIN,他们将被提示登录。

保护方法使用注释

你也可以安全的方法调用的任何服务通过使用可选注释JMSSecurityExtraBundle包。这个包不包括在Symfony标准分布,但你可以选择安装它。ob娱乐下载

要启用注释功能,标签你想要安全的服务security.secure_service标记(你也可以自动启用这个功能对所有服务,看到侧边栏下图):

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
# app / config / services.yml服务:欧宝平台是合法的吗newsletter_manager:类:AppBundle 欧宝平台是合法的吗\通讯\ NewsletterManager标签:- - - - - -{名称:security.secure_service}

然后,您可以使用注释实现相同的结果如上所述:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
名称空间AppBundle\欧宝平台是合法的吗通讯;使用JMS\SecurityExtraBundle\注释\安全;/ /……欧宝平台是合法的吗NewsletterManager{/ * * *@ secure(角色= " ROLE_N欧宝平台是合法的吗EWSLETTER_ADMIN”) * /公共函数send欧宝平台是合法的吗Newsletter(){/ /……}/ /……}

请注意

创建代理类的注释工作,因为您的类的执行安全检查。这意味着,虽然您可以使用注释在公共和保护方法,你不能使用他们的私有方法或方法标记决赛。

JMSSecurityExtraBundle还允许您安全方法的参数和返回值。有关更多信息,请参见JMSSecurityExtraBundle欧宝官网下载app文档。

在保护服务的方法(如上所示),您可以单独标记每个服务,或激活功能所有服务一次。为此,设置secure_all_services真正的配置选项:

  • YAML
  • XML
  • PHP
1 2 3 4
# app / config / config.ymljms_security_extra:#……secure_all_services:真正的

这种方法的缺点是,如果激活,初始页面加载可能非常慢取决于你有多少服务定义。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。