Asked Aug 27th, 2022 5:01 a.m. 117 0 1
  • 117 0 1
0

Gate:before và policy trong laravel

Share
  • 117 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 ANSWERS


Answered Aug 29th, 2022 3:31 a.m.
Accepted
+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;
}
Share
Avatar June @phuocbt698
Aug 30th, 2022 9:38 a.m.

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

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.