如何保护应用程序中的任何服务或方法
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.7,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 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
的角色。在添加安全性之前,类看起来像这样:
12 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
类:
12 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 ()
方法调用:
12 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}
然后你可以使用注释实现与上面相同的结果:
12 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(){/ /……}/ /……}
请注意
注释之所以有效,是因为为执行安全检查的类创建了代理类。这意味着,虽然您可以在公共方法和受保护方法上使用注释,但不能将它们用于私有方法或标记为final的方法。
jmssecurityextrabundance还允许保护方法的参数和返回值。有关更多信息,请参见JMSSecurityExtraBundle欧宝官网下载app文档。