رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
RBAC در لاراول (حل شد)
#1
سلام خدمت همه
بالاخره بعد از search ها در اینترنت فهمدیم باید چطوری role درست کرده و به کاربر نسبت دهم
اما توی قسمت بعدش موندم . لطفا راهنمایی کنید
مشکل کدی ندارم . نمیدونم چطور باید استفاده کنم
این کدمه
    public function isEmployee(){
       return ($this->roles()->count() ? true : false);
   }
   public function hasRole($role)
   {
       return $this->roles->pluck("name")->contains($role);
   }
   private function getIdInArray($array , $term)
   {
       foreach ($array as  $key => $val )
       {
           if($val == $term)
           {
               return $key;
           }
       }
       throw new UnexpectedValueException;
   }
   public function makeEmployee($title)
   {
       $assigned_roles = [];
       $roles = Role::all()->pluck("name","id");

       switch ($title)
       {
           case 'super_admin':
               $assigned_roles[] = $this->getIdInArray($roles , 'create');
               $assigned_roles[] = $this->getIdInArray($roles , 'update');
           case 'admin':
               $assigned_roles[] = $this->getIdInArray($roles , 'delete');
               $assigned_roles[] = $this->getIdInArray($roles , 'edit');
           case 'user':
               $assigned_roles[] = $this->getIdInArray($roles , 'read');
               $assigned_roles[] = $this->getIdInArray($roles , 'lemons');
               break;
           default :
               throw new Exception("The Employee status does not Exist");
       }
       $this->roles()->sync($assigned_roles);
   }
}
حالا چطور داخل کنترلری که میخوام پست ایجاد کنم این role رو بذارم چون من نه از Gate استفاده کردم نه از policy
انگار که نیستی ، چو هستی خوش باش
حکیم عمر خیام
پاسخ
تشکر شده توسط:
#2
سلام به همه دوستان
بنده داخل یوتوب جواب سوالم رو پیدا کردم گفتم باهاتون به اشتراک بذارم
برای اینکار باید از middleware استفاده کنید
پس یک middleware با نام CheckRole میسازیم با این محتوا
    public function handle($request, Closure $next)
   {
       if($request->user() === null) {
           return response("first login", 401);
       }
       $action = $request->route()->getAction();
       $roles = isset($action['roles']) ? $action['roles'] : null;
       foreach ($roles as $key=>$val)
       {
           $myrole = $val;
       }
       if($request->user()->hasRole($myrole) || !$roles) {
           return $next($request);
       }
      return response("you can not access");
   }

 
و در قسمت route
Route::post('/cards/add',[
    'uses'=>'CardsController@create',
   'middleware' => 'roles',
   'roles' => ['create'],
]);

و الان درست کار میکند
توضیح :
منظور از getAction() در
$action = $request->route()->getAction();
همان 'middleware' , 'roles' , 'uses' هست
انگار که نیستی ، چو هستی خوش باش
حکیم عمر خیام
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان