【发布时间】:2019-08-23 04:22:54
【问题描述】:
我正在创建 API,让用户从数据库中读取一些数据,但我想拒绝访问我表中的某些列。
例如有权限users.show.name_of_example_column,应该访问users表中的name_of_example_column列。
Spatie/Laravel-Permission 负责将用户与我的 API 中的权限和角色相关联。
我系统中的用户有 2 个权限:
users.show.idusers.show.name
管理员拥有所有权限。
我已经做了一个例子来告诉你我想要什么结果(取决于我的角色)。
public function index($perPage = 30)
{
$user = Auth::User();
$fields = [];
if($user->hasPermissionTo('users.show.id')) {
$fields[] = 'id';
}
if($user->hasPermissionTo('users.show.name')) {
$fields[] = 'name';
}
if($user->hasPermissionTo('users.show.email')) {
$fields[] = 'email';
}
return User::Select($fields)->paginate($perPage);
}
当然,这个例子是不好的做法。我应该通过访问器或其他地方在用户模型中执行此操作吗?正确的方法是什么?有什么想法吗?
更新
我试图检查访问者的权限
这里是例子
public function getEmailAttribute($value)
{
if(Auth::User()->hasPermissionTo('users.show.email')) {
return $value;
}
return false;
}
但当它返回false 时,它不会从集合中取消设置(删除)“电子邮件”属性。它只是将原始值替换为“false”。
【问题讨论】:
-
使用访问器/修改器似乎是一个更好的选择。
-
非常感谢。这就是我需要的。
-
请看我的更新。我对访问器有一个问题。
-
抱歉回复晚了,看看下面的帖子是否有帮助
标签: php laravel api permissions