如何实现自己的选民将IP地址列入黑名单吗

编辑该页面

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

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

如何实现自己的选民将IP地址列入黑名单吗

Symfob娱乐下载ony的安全组件提供几层授权用户。的一层被称为“选民”。选民是一个专用的类,如果用户有权利检查连接到应用程序或访问特定的资源/ URL。例如,Symfony提供了一ob娱乐下载层,检查用户是否充分授权,或如果它有一些预期的角色。

创建一个定制的选民有时有用处理一个特定的情况下不是由框架。在本节中,您将学习如何创建一个将允许您的选民黑名单用户的IP。

选民的接口

一个定制的选民必须实现VoterInterface需要以下三个方法:

1 2 3 4 5 6
接口VoterInterface{公共函数supportsAttribute(美元属性);公共函数supportsClass(美元);公共函数投票(TokenInterface美元令牌,美元对象数组,美元属性);}

supportsAttribute ()方法用于检查给定的用户属性(如果选民支持我。艾凡:这样的角色ROLE_USER,ACL编辑等)。

supportsClass ()方法是用来检查如果选民支持的类对象的访问检查。

投票()方法必须实现业务逻辑验证用户是否有访问权限。该方法必须返回以下值之一:

  • VoterInterface: ACCESS_GRANTED:授权将被授予这个选民;
  • VoterInterface: ACCESS_ABSTAIN:选民不能决定是否应该授予授权;
  • VoterInterface: ACCESS_DENIED:由这个选民授权将被拒绝。

在这个例子中,您将检查如果用户的IP地址与黑名单列表地址和“东西”将应用程序。如果用户的IP列入黑名单,你会回来VoterInterface: ACCESS_DENIED,否则你会回来VoterInterface: ACCESS_ABSTAIN这个选民的目的仅仅是拒绝访问,不授权访问。

创建一个定制的选民

基于它的IP黑名单用户,您可以使用request_stack服务和比较对一组IP地址列入黑名单的IP地址:

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日27 28 29 30 31 32 33 34 35 36 37 38 39 40
/ / src / Acme / DemoBundle /安全/授权/选民/ ClientIpVoter.php名称空间Acme\DemoBundle\安全\授权\选民;使用ob娱乐下载\组件\HttpFoundation\RequestStack;使用ob娱乐下载\组件\安全\核心\授权\选民\VoterInterface;使用ob娱乐下载\组件\安全\核心\身份验证\令牌\TokenInterface;ClientIpVoter实现了VoterInterface{受保护的美元requestStack;私人美元blacklistedIp;公共函数__construct(RequestStack美元requestStack数组,美元blacklistedIp=数组()){美元- >requestStack =美元requestStack;美元- >blacklistedIp =美元blacklistedIp;}公共函数supportsAttribute(美元属性){/ /你不会检查一个用户属性,所以返回true返回真正的;}公共函数supportsClass(美元){/ /你的选民支持所有类型的令牌类,所以返回true返回真正的;}公共函数投票(TokenInterface美元令牌,美元对象数组,美元属性){美元请求=美元- >requestStack- >getCurrentRequest ();如果(in_array (美元请求- >getClientIp (),美元- >blacklistedIp)) {返回VoterInterface::ACCESS_DENIED;}返回VoterInterface::ACCESS_ABSTAIN;}}

就是这样!选民就完成了。下一步是注入选民的安全层。可以轻松地通过服务容器。

提示

您的实现的方法supportsAttribute ()supportsClass ()不被称为内部的框架。一旦你注册你的选民投票()方法总是会叫,不管这两个方法返回true。因此你需要调用这些方法的实现投票()方法和返回ACCESS_ABSTAIN如果你的选民不支持类或属性。

宣称选民作为服务

安全层注入选民,你必须声明这是一个服务,并作为一个标签security.voter:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
# src / Acme / AcmeBundle /资源/ config / services.yml服务:security.access.blacklist_voter:类:Acme \ \选民\ ClientIpVoter DemoBundle \安全\授权参数:[" @request_stack ",[123.123.123.123,171.171.171.171]]公众:标签:- - - - - -{名称:security.voter}

提示

一定要进口这个配置文件从你的主应用程序配置文件(如。应用程序/配置/ config.yml)。更多信息见服务容器。一般来说,阅读更多关于定义服务的服务容器一章。

改变访问决策策略

为了让新选民生效,您需要更改默认的访问决策策略,默认情况下,如果授予访问权限任何选民授予访问权限。

在这种情况下,选择一致策略。不像肯定的战略(默认),一致策略,如果只有一个选民拒绝访问(例如ClientIpVoter),访问是不授予给最终用户。

为此,覆盖默认的access_decision_manager部分应用程序的配置文件中使用以下代码。

  • YAML
  • XML
  • PHP
1 2 3 4 5
# app / config / security.yml安全:access_decision_manager:#策略可以:肯定,一致或共识策略:一致

就是这样!现在,当用户决定是否应该访问,新选民将拒绝任何用户访问的ip黑名单列表。

另请参阅

对于一个更高级的用法授权

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