为了账号安全,请及时绑定邮箱和手机立即绑定

用户只能查看他们的数据

用户只能查看他们的数据

PHP
摇曳的蔷薇 2022-01-02 14:44:05
我想创建一个声明以确保用户只能查看他们自己的 call_center 数据,除非他们的 role_id 是 2、3 或 4。截至目前,如果 URL 是 Venture.local/?call_center=77 并且用户更改了 URL到 Venture.local/?call_center=22 任何人 role_id 都可以看到其他 call_center 数据。我希望页面返回给用户自己的 call_center,除非他们的 role_id 是 2、3 或 4。我不确定使这项工作的最佳速度是使用 JavaScript 还是我的dashboardcontroller.php?我已经包含了我的控制器,因为我认为我可以做这样的事情: if($role_id['id'] != '2' || $role_id['id'] != '3' || $role_id['id'] != '4')        {        $pending->where($call_center, '=', $user_id);        $active->where($call_center, '=', $user_id);        $cancelled_contracts->where($call_center, '=', $user_id);        $late_contracts->where($call_center, '=', $user_id);        $back_out_contracts->where($call_center, '=', $user_id);        $pending_late->where($call_center, '=', $user_id);        $pending_cancellation->where($call_center, '=', $user_id);        }我在正确的方向吗?或者有人可以指导我朝着正确的方向前进吗?任何帮助表示赞赏。
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

在您的 User 模型中,如果您还没有将角色设置为关系,您可以执行以下操作:


public function roles()

{

    return $this->belongsToMany('App\Role');

}


public function hasRole($roleName) : bool

{

    // you could always change this function so it could take

    // an array of role IDs instead of the name


    $roles = $this->roles()->where('name', roleName)->firstOrFail();


    if ($roles) {

        return true;

    }


    return false;


}

在您的呼叫中心模型中,您可以设置如下功能:


public function canBeViewedBy(User $user) : bool

{

    // customise role name to whichever roles you want


    if ($user->hasRole('canViewAllCentres') {

        return true;

    }


    // you can add additional custom logic here


    return false;

}


然后在您的 Dashboard 控制器中的函数中:


if (!$call_center->canBeViewedBy(Auth::user()) {

    return abort(403, 'Forbidden');

}


查看完整回答
反对 回复 2022-01-02
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

首先,停止在 URL 中传递数据。如果可能,请在用户登录时使用会话来处理此问题。


如果您不喜欢上述方法,那么您可以为此使用加密/解密。永远不要在 URL 中传递像 22 或 33 这样的原始数字。不要让最终用户感到好奇。


use Illuminate\Support\Facades\Crypt;


$encrypted = Crypt::encryptString('123');


$decrypted = Crypt::decryptString($encrypted);

此外,您可以阅读 Laravel 授权文档,它对您面临的确切问题很有用。


查看完整回答
反对 回复 2022-01-02
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号