首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对资源部分的访问级别控制?

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

Stack Overflow用户
提问于 2016-06-28 19:41:27
回答 1查看 27关注 0票数 1

我正在进行一个新的项目,我正在试图找出我们将要使用的安全等级。首先,我们想到了一个基本的读写权限场景。然后,我们可能不得不限制对部分资源的读访问(就像Facebook对权限所做的那样--电子邮件、user_about_me、user_birthday等等)。

我们考虑过这样的事情: user_basic,user_contact

因此,如果您只有user_basic,您将得到这样的信息:{ id: 1,name:"Tom",lastName:"Doe“}

如果两者兼得:{ id: 1,名称:"Tom",lastName:"Doe",电话:"123-123-1234",地址:“123号假街道”}

你们知道有什么包能帮我更有效地实现这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-29 05:56:28

根据您正在做的事情(例如HTML视图或REST应用程序),您可以在symfony中以多种方式完成此操作。

如果使用HTML,您只需在树枝上使用角色和开关(这是一种丑陋的方法)。

代码语言:javascript
运行
复制
{% if is_granted("ROLE_WITH_EXTRA_FIELDS") %}
{% endif %}

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

取自strategies#creating-different-views-of-your-objects的例子

代码语言:javascript
运行
复制
<?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;
}

在您的控制器的操作中,类似于这样的东西:

代码语言:javascript
运行
复制
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.

您将使用类似于setGroups($user->getRoles())的内容进行调用,只要这些角色与序列化程序组匹配,那么它就会按预期工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38084965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档