使用Laravel检索模型/对象时,如何动态隐藏模型/对象的属性

时间:2016-02-04 02:21:13

标签: php laravel

我的问题更具理论性,我想知道你如何动态地处理这个隐藏对象属性的东西。我知道你可以使用

`protected $hidden` 

作为隐藏特定属性的数组,但这不适用于基于用户的不同上下文显示模型的不同属性的情况。

一个想象的场景是:假设我们在平台上有三个不同的用户,超级管理员,管理员,普通用户,每个用户都可以看到所有其他用户,但是说超级管理员可以看到用户的所有属性,管理员,不仅可以看到密码,普通用户只能看到特定的属性。

2 个答案:

答案 0 :(得分:0)

要动态设置模型的隐藏属性,可以在从数据库查询之后在eloquent模型上使用setHidden()方法。通过这种方式,您可以防止它通过延迟/急切加载意外输出这些字段。

答案 1 :(得分:-1)

思维差异,在像Moodle这样的其他框架中,他们定义了一些数组来处理用户组可以看到的属性。

让我们看一下我写的一个小例子,如果可能的话你可以申请:

$attrSuperAdmin   = ['username', 'password', 'a1', 'a2', 'a3'];
$attrAdmin        = ['username', 'password', 'a1', 'a2'];
$attrNormal   = ['username', 'a1'];

if(isSuperAdmin($currentUser)){
    $userInfo = User::select($attrSuperAdmin)->get();
} else if(isSuperAdmin($currentUser)){
    $userInfo = User::select($attrAdmin)->get();
} else {
    $userInfo = User::select($attrNormal)->get();
}

这是伪代码

你不必隐藏任何东西。只需选择你想要的。这是一种安全的方式。