Php 对部分资源的访问级别控制?

Php 对部分资源的访问级别控制?,php,symfony,Php,Symfony,我正在做一个新的项目,我正试图弄清楚我们将要使用的安全级别。首先,我们想到了一个基本的读写权限场景。然后,我们可能不得不限制对部分资源的读取权限(类似于Facebook使用权限所做的事情——电子邮件、用户关于我、用户生日等等) 我们考虑的是:用户基础,用户联系 因此,如果您只有user_basic,您将得到类似于:{id:1,name:“Tom”,lastName:“Doe”} 如果你两者都有,你会得到:{id:1,名字:“汤姆”,姓氏:“Doe”,电话:“123-123-1234”,地址:“1

我正在做一个新的项目,我正试图弄清楚我们将要使用的安全级别。首先,我们想到了一个基本的读写权限场景。然后,我们可能不得不限制对部分资源的读取权限(类似于Facebook使用权限所做的事情——电子邮件、用户关于我、用户生日等等)

我们考虑的是:用户基础,用户联系

因此,如果您只有user_basic,您将得到类似于:{id:1,name:“Tom”,lastName:“Doe”}

如果你两者都有,你会得到:{id:1,名字:“汤姆”,姓氏:“Doe”,电话:“123-123-1234”,地址:“123假街”}


你们知道有什么软件包可以帮助我更有效地实现这一点吗?

根据您的工作(例如HTML视图或REST应用程序),您可以在symfony中以多种方式实现这一点

如果是HTML,您可以在twig中使用角色和开关(这是一种丑陋的方法)

对于rest应用程序,可以使用更好的方法。JMS序列化程序()提供了一个bundle(),允许您使用排除策略。您可以在控制器级别将这些数据与角色混合,以便只向具有适当角色的人员公开您想要的数据


您可以使用类似于
setGroups($user->getRoles())
的方法进行调用,只要角色与序列化程序组匹配,它就会按预期工作。

如果我的答案适合您,请将其选为最佳答案,以便我可以获得更多声誉并帮助他人。谢谢你,祝你好运!
{% if is_granted("ROLE_WITH_EXTRA_FIELDS") %}
{% endif %}
<?php

use JMS\Serializer\Annotation\Groups;

class BlogPost
{
    /** @Groups({"list", "details"}) */
    private $id;

    /** @Groups({"list", "details"}) */
    private $title;

    /** @Groups({"list"}) */
    private $nbComments;

    /** @Groups({"details"}) */
    private $comments;

    private $createdAt;
}
use JMS\Serializer\SerializationContext;

$serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('list')));

//will output $id, $title and $nbComments.

$serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('Default', 'list')));

//will output $id, $title, $nbComments and $createdAt.