- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Voters 来限制对 REST API 中实体的访问。
第1步
考虑这个限制用户访问博客文章的选民:
class BlogPostVoter extends Voter
{
public function __construct(AccessDecisionManagerInterface $decisionManager)
{
$this->decisionManager = $decisionManager;
}
/**
* Determines if the attribute and subject are supported by this voter.
*
* @param string $attribute An attribute
* @param int $subject The subject to secure, e.g. an object the user wants to access or any other PHP type
*
* @return bool True if the attribute and subject are supported, false otherwise
*/
protected function supports($attribute, $subject)
{
if (!in_array($attribute, $this->allowedAttributes)) {
return false;
}
if (!$subject instanceof BlogPost) {
return false;
}
return true;
}
/**
* Perform a single access check operation on a given attribute, subject and token.
*
* @param string $attribute
* @param mixed $subject
* @param TokenInterface $token
* @return bool
* @throws \Exception
*/
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
return $this->canUserAccess($attribute, $subject, $token);
}
public function canUserAccess($attribute, $subject, TokenInterface $token) {
if ($this->decisionManager->decide($token, array('ROLE_SUPPORT', 'ROLE_ADMIN'))) {
return true;
}
//other logic here omitted ...
return false;
}
}
canUserAccess
确定是否允许用户查看 BlogPost。这一切都很好。
class SomeOtherVoter extends Voter
{
public function __construct(BlogPostVoter $blogPostVoter)
{
$this->decisionManager = $decisionManager;
}
...
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
//other logic
if ($this->blogPostVoter->canUserAccess($attribute, $subject, $token)) {
return true;
}
return false;
}
}
security.access.decision_manager
在哪里应该取决于 Voter 的实现。所以我没有看到循环引用在哪里。
最佳答案
引用 VoterOne
来自 VoterTwo
您可以注入(inject) AuthorizationCheckerInterface
进入 VoterTwo
然后调用->isGranted('ONE')
.其中 ONE 是 VoterOne
的受支持属性.
像:
class VoterTwo extends Voter
{
private $authorizationChecker;
public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
$this->authorizationChecker = $authorizationChecker;
}
protected function supports($attribute, $subject)
{
return in_array($attribute, ['TWO']);
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
return $this->authorizationChecker->isGranted('ONE', $subject);
}
}
VoterTwo
只是将请求重定向到
VoterOne
(或支持属性 ONE 的选民)。然后可以通过附加条件来扩展。
关于Symfony2 : Call Voter from another Voter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40046998/
我正在使用 Voters 来限制对 REST API 中实体的访问。 第1步 考虑这个限制用户访问博客文章的选民: class BlogPostVoter extends Voter { pu
我正在 Codechef 上解决这个问题。但我提交的代码得到了错误的答案。问题链接::http://www.codechef.com/problems/VOTERS/ 问题简述::有3位官员负责收集该
我开始研究选民系统以保护我的 URL,但我有很多问题。 首先,我不知道我是否必须使用“角色”或“权限”。 “角色”是指 Role_User、Role_Manager 等。我所说的“权限”是指“Acce
我一直在研究一种遗传算法,其中有一个群体由具有颜色和偏好的个体组成。偏好和颜色来自少数有限状态,可能大约有 4 或 5 个。(例如:1|1、5|2、3|3 等) 每个人都为自己的偏好投“票”,这会帮助
我实现了一个自定义的 Symfony2 Voter,并将属性数组传递给 denyAccessUnlessGranted 的第一个参数,就像在我的 Controller 中一样: $attr = [
我即将开始一个项目,该项目将需要几种具有不同“权力”的用户。 为了提供一些背景信息,我预计会有 1000 到 10000 个用户。 我至少有 3 个“层”:A、B、C “A”可以是“咨询公司”,每个公
我正在尝试实现自定义选民。 从 Controller 我这样称呼它: $prj = $this->getDoctrine()->getRepository('AppBundle:Project')->
我已经成功创建了一个自定义 AccessDecisionVoter 类,并通过 XML 将其绑定(bind)到我的 Web 应用程序中。 现在我希望在每次页面加载时调用它,以确保允许用户访问该特定页面
我正在使用投票者来确定登录用户是否可以编辑给定对象。其中一个标准需要与另一个对象进行比较,但我不确定如何将其传递给选民。我不能使用构造函数参数,因为它不是预定义的值。 基本上我想做这样的事情: pr
我构建了一个选民,我需要在其中对用户调用 is_granted。 在我的选民中注入(inject) security.authorization_checker 服务时,出现以下错误 ServiceC
我是一名优秀的程序员,十分优秀!