如何确保您的应用程序的服务或方法吗
编辑该页面警告:你浏览的文档欧宝官网下载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文档。