Symfony 4选民-角色和权限问题

ts

我开始研究选民系统以保护我的URL,并且我有很多问题。

首先,我不知道我是否必须使用“角色”或“权限”。

用“角色”来表示类似Role_User,Role_Manager等。用“权限”来表示类似“ Access_users”,“ Edit_User”,“ Add_User”等。

我对吗?

如果是,我想在选民中检查“权限”以控制对URL的访问,如果没有可控制的对象,则该事件。

/**
 * @Route("/", name="list")
 * @Security("is_granted('ROLE_ADMIN') or is_granted('PERM_ACCESS_SERIES')")
 */
public function list()
{
    $series = $this->seriesService->findAll();

    return $this->render('backend/series/list.html.twig', [
        "series" => $series
    ]);
}

在这种情况下,我想检查用户是否具有角色ROLE_ADMIN或权限PERM_ACCESS_SERIES,但是我不知道如何在选民中进行操作。

有关信息,请在我的security.yaml配置中设置“ ROLE_ADMIN”,但我想使这些角色动态化,以便能够创建角色(并为角色分配权限?)。

在我的Voter类中,当我控制文档时,我检查所有者以及可以管理该文档的其他用户,但是当我不通过文档时,我真的不知道该怎么做。

只是获取用户的权限,然后检查所请求的权限是否包含在其中。像这样的东西:

if (in_array($attribute, $user->getPermissions())) {
    return true;
}

其实这是我的选民

 protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
    //ADMIN and SUPER_ADMIN can do anything they want !
    if ($this->decisionManager->decide($token, array(User::ROLE_ADMIN, User::ROLE_SUPER_ADMIN))) {
        return true;
    }

    $user = $token->getUser();
    if (!$user instanceof User) {
        // the user must be logged in. if not, deny access
        return false;
    }

    $series = $subject;
    switch ($attribute) {
        case self::PERM_ACCESS_SERIES:
            if (in_array($attribute, $user->getPermissions())) {
                return $this->canAccess($series, $user);
            }
            break;

        case self::PERM_ADD_SERIES:
            if (in_array($attribute, $user->getPermissions())) {
                return $this->canAdd($series, $user);
            }
            break;

        case self::PERM_EDIT_SERIES:
            if (in_array($attribute, $user->getPermissions())) {
                return $this->canEdit($series, $user);
            }
            break;

        case self::PERM_DELETE_SERIES:
            if (in_array($attribute, $user->getPermissions())) {
                return $this->canDelete($series, $user);
            }
            break;

        default:
            throw new \LogicException('This code should not be reached!');
            break;
    }

    return false;
}

在每种情况下,我都会检查该属性是否在用户权限中。

好了,如您所见,我对角色和权限缺乏很多了解,因此建议和帮助组织了所有受欢迎的内容。

另外,如果有不清楚的地方,请不要犹豫告诉我,英语不是我的母语,所以也许我的句子结构不好,而且完全无法理解。

凯布扎

您所说的角色和权限是一回事。无需区分它们。您可以想到您的PERM,例如ROLE_ACCESS_SERIES等,这只是命名/约定问题,但从Symfony的角度来看,它是相同的。

向角色分配权限无非就是角色层次结构,更多内容在文档中同样不要忘记,一个用户可以有多个角色。

从现在开始,我将只谈论角色。

对于动态角色,您的UserInterface对象具有的方法getRoles()不一定是静态的,但是可以例如从数据库/您希望为每个用户存储的任何存储中加载角色。

对于对象签入权限。例如,ROLE_LIST_SERIES通常不需要任何对象来检查权限,因此它可以没有对象,但是ROLE_EDIT_SERIES例如应该始终与我们正在编辑的对象相关联,这意味着如果没有提供,我们将抛出异常,这意味着我们缺少某处通过它的地方。

对我来说,如果以CRUD为例,我将扮演以下角色:

ROLE_ENTITY_MASTER:
    - ROLE_ENTITY_LIST
    - ROLE_ENTITY_EDIT
    - ROLE_ENTITY_ADD
    # and you continue what you need.

这样做的好处是,例如,如果我想让某人完全访问某项内容,我只需要分配一个角色,而如果我想让某人限制我就只给他我想要的角色。然后在我getRoles()(实际上我是从数据库加载的,所以这只是伪代码)。

getRoles() {
    return [ROLE_ADMIN, ROLE_ENTITY_MASTER2, ROLE_ENTITY_MASTER];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章