Yêu cầu thg 8 27, 2022 5:01 SA 96 0 1
  • 96 0 1
0

Gate:before và policy trong laravel

Chia sẻ
  • 96 0 1

Mn cho em hỏi chút về việc cấp full quyền cho một user nhất định!

//Model
public function superAdmin(){
        return $this->role_id === 1 ;
    }
 public function boot()
    {
        $this->registerPolicies();
        Gate::before(function ($user, $author) {
            return $user->superAdmin();
        });
    }
//policy
public function view(UserModel $user , UserModel $userModel)
    {
    //UserModel $user là user hiện tại đang login
        return $user->id === $userModel->id;
    }
//controller
public function show($id)
    {
        $userNow = Auth::guard('admin')->user();
        $user = UserModel::findOrFail($id);
        if($userNow->can('view', $userNow)){
            return view('admin.user.show',[
                'title' => self::TITLE,
                'userInfo' => $user
            ]);
        }else{
            return redirect()->back()->with('message', 'Bạn không thể xem thông tin của người khác!');
        }
    }

trong controller em gọi $userNow là user đang login nhưng nếu là user có role là 1 thì xem được hết show, nhưng đến role != 1 thì lại không xem được chính bản thân mình! và khi em $userNow->can('view', $userNow) thì ide có gạch đỏ phương thức can của em mặc dù em vẫn chạy được! Thì em hiện tại mong muốn nếu là superAdmin thì có thể xem toàn bộ show còn ngược lại thì chỉ xem được chính bản thân của mình! em có 2 guard một là của admin một là của user(cái này là của khách hàng đó ạ - và mặc đinh guard('web') của laravel) Em cảm on mn !

1 CÂU TRẢ LỜI


Đã trả lời thg 8 29, 2022 3:31 SA
Đã được chấp nhận
+1

Khi bạn gọi:

if($userNow->can('view', $userNow))

thì lúc này Gate::before sẽ được trigger trước nên kết quả trả về của câu lệnh if đó luôn luôn là false nếu bạn không phải là admin. Bạn bỏ thằng Gate::before và sửa lại hàm view trong Policy như sau:

public function view(UserModel $user , UserModel $userModel)
{
  return $user->superAdmin() || $user->id === $userModel->id;
}
Chia sẻ
Avatar June @phuocbt698
thg 8 30, 2022 9:38 SA

Dạ em hiểu rồi ạ! em cảm ơn

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí