【发布时间】:2014-01-08 04:10:51
【问题描述】:
假设我们有 3 个主要角色直接绑定到数据库表 user:ROLE_USER、ROLE_MODERATOR 和 ROLE_ADMIN。
但是,我们还有一些其他角色,用于Crews 组件(请参阅下面的 UML)。我对Crew 中执行的操作使用以下角色:ROLE_CREW_BOSS、ROLE_CREW_LEFTHAND、ROLE_CREW_RIGHTHAND、ROLE_CREW_MEMBER。
那是基础结构,我希望这部分清楚。现在问题来了……
问题
每个具有ROLE_MODERATOR 角色的用户都可以创建ForumTopic 对象,但不能创建设置crew_id 的对象,因为该对象对于特定工作人员来说是私有的。此外,只有具有ROLE_CREW_BOSS、ROLE_CREW_LEFTHAND 或ROLE_CREW_RIGHTHAND 角色的工作人员(也是用户)可以编辑其工作人员的论坛主题。我如何检查这种复杂性?可能是Voter?
更新 1
我已经解决了 50% 的问题,但它并不可靠。我已经为 Entity\\ForumTopic 对象创建了一个特定的选民。
public function vote(TokenInterface $token, $object, array $attributes)
{
if ($object instanceof ObjectIdentityInterface) {
if ($object->getType() == 'Entity\\ForumTopic') {
/**
* @var Member $member
*/
$member = $token->getUser();
$userTable = new UserTable();
$user = $userTable->getByMember($member);
$userInCrewTable = new UserInCrewTable();
$crewMember = $userInCrewTable->getByUser($user);
if ($crewMember && in_array($crewMember->getRole(), array('boss', 'lefthand', 'righthand'))) {
return self::ACCESS_GRANTED;
}
}
}
return self::ACCESS_ABSTAIN;
}
这里唯一的问题是我不使用各自的角色,所以我不能使用角色层次结构功能。有人对我当前的解决方案有更好的解决方案或改进吗?
谢谢!
史蒂芬
【问题讨论】:
-
+1 表示数据库图 XD
-
请告诉我,有一个工具可以创建这样的关系图:)
-
@V-Light 现在确定我使用的是什么,但只需谷歌“ASCII 图”,例如asciiflow.com