如何实现自己的选民将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}
改变访问决策策略
为了让新选民生效,您需要更改默认的访问决策策略,默认情况下,如果授予访问权限任何选民授予访问权限。
在这种情况下,选择一致
策略。不像肯定的
战略(默认),一致
策略,如果只有一个选民拒绝访问(例如ClientIpVoter
),访问是不授予给最终用户。
为此,覆盖默认的access_decision_manager
部分应用程序的配置文件中使用以下代码。
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / security.yml安全:access_decision_manager:#策略可以:肯定,一致或共识策略:一致
就是这样!现在,当用户决定是否应该访问,新选民将拒绝任何用户访问的ip黑名单列表。
另请参阅
对于一个更高级的用法授权。