用户只能查看他们的数据

我想创建一个声明以确保用户只能查看他们自己的 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);

        }

我在正确的方向吗?或者有人可以指导我朝着正确的方向前进吗?任何帮助表示赞赏。


摇曳的蔷薇
浏览 160回答 2
2回答

慕莱坞森

在您的 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');}

叮当猫咪

首先,停止在 URL 中传递数据。如果可能,请在用户登录时使用会话来处理此问题。如果您不喜欢上述方法,那么您可以为此使用加密/解密。永远不要在 URL 中传递像 22 或 33 这样的原始数字。不要让最终用户感到好奇。use Illuminate\Support\Facades\Crypt;$encrypted = Crypt::encryptString('123');$decrypted = Crypt::decryptString($encrypted);此外,您可以阅读 Laravel 授权文档,它对您面临的确切问题很有用。
打开App,查看更多内容
随时随地看视频慕课网APP