حل شد. پیاده سازی دسترسی ها در API لاراول ۸

پرسیده شده
فعالیت 1158 روز پیش
دیده شده 474 بار
0

با سلام و وقت بخیر

اخیرا توی پروژه ای میخوام که سیستم مدیریت نقش ها و دسترسی های یوزر ها رو پیاده سازی کنم ولی متاسفانه ارور بر میخورم. میخوام که همزمان بتونم اطالاعات کاربر رو ویرایش کنم بتونم دسترسی ها و نقش هایی که دارن رو بفرستم. اگه بگید مشکل کجا هست 

متد update به این صورت هست:

public function update(Request $request, $userId)
    {
        $user = User::findOrFail($userId);

        $validatedData = request()->validate([
            // validation done
        ]);

        $validatedData['password'] = bcrypt($validatedData['password']);

        $user->update($validatedData);
        
        $user->refreshPermissions($request->permissions);
        $user->refreshRoles($request->roles);

        return response()->json([
            'statuCode' => 200,
            'desctriprion' => "User updated successfully"
        ]);
    }
Error: BadMethodCallException: Method Illuminate\Database\Eloquent\Collection::sync does not exist. in file /project_dir/vendor/laravel/framework/src/Illuminate/Macroable/Traits/Macroable.php on line 103
فایل پیوست

Alireza far
Alireza far

6 بهمن 99

0
حذف شده

سلام 

 

احتمال میدم داخل فایل HasPermission شما به جای استفاده از متد Permission کالکشن اون رو صدا زدید، یعنی در واقع باید به صورت زیر اون متد رو صدا بزنید 

 

$user->permissions()->sync()

ولی در واقع شما به این صورت صدا زدید 

$user->permissions->sync()
فایل پیوست

مهرداد سامی

توسط

مهرداد سامی

6 بهمن 99

0
حذف شده

فعلا به جای فانکشن refreshPermissions از sync به صورت مستقیم استفاده کردم و خیلی خوب کار میکنه و موردی نداره به این صورت:

// Replace it
$user->refreshPermissions($request->permissions);
$user->refreshRoles($request->roles);

// With it
$user->permissions()->sync($request->permissions);
$user->roles()->sync($request->roles);

ولی با این تفاوت اساسی که اینجا permissions و roles با آیدی هاشون کار میکنن. (با اسم کار نمیکنن). (طبق مکانیزمی که در دوره گفته شد قرار هست که با اسم کار کنن)

ولی مشکلی نداره چون شما میتونی به جای ارسال اسم اون permission و role, آیدی هر کدوم رو ارسال کنید.

 

استاد سامی عزیز اگه لازم باشه این مورد رو بررسی و در دوره ها عنوان کنید. تشکر

فایل پیوست

Alireza far

توسط

Alireza far

6 بهمن 99