پیاده‌سازی ACL با Gate

زمان قرارگیری : 25 فروردین 1399
زمان این قسمت : 19:29
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 328 نفر
قیمت دوره 259000 تومان
وضعیت دوره در حال برگزاری
زمان کل دوره 26:39:36
تعداد قسمت‌ها 117
نوع دسترسی نقدی

حالا وقت آن است که از مدل‌ها و جداول سیستم سطوح دسترسی که در جلسات قبل پیاده کردیم عملا برای پیاده سازی سطوح دسترسی در برنامه‌ خودمان استفاده کنیم.

بخش اول
مقدمات
رایگان 09:10
بخش ششم
مفاهیم هسته لاراول
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 328 نفر
قیمت دوره 259000 تومان
وضعیت دوره در حال برگزاری
زمان کل دوره 26:39:36
تعداد قسمت‌ها 117
نوع دسترسی نقدی

آفلاین
user-avatar
مدرس دوره حسام موسوی

اول داستان، طراح گرافیک بودم و ۲ سالی به عنوان طراح مشغول بودم، بعد به برنامه‌نویسی علاقمند شدم و الان بیشتر از ۱۰ ساله که عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

سوالات و گفتگو‌ها

سوالات و گفتگو‌ها

اگر سوال و مشکلی یا حتی بحثی در یکی از حوزه‌های برنامه‌نویسی دارید این بخش به شما کمک ویژه‌ای خواهد کرد

دورهای پیشنهادی

مشاهده همه دوره ها
آشنایی با امکانات جدید لاراول 7

آشنایی با امکانات جدید لاراول 7

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

آموزش لاراول

آموزش لاراول

فریمورک لاراول یکی از محبوبترین و بهترین فریمورک های حال حاضر برای زبان php می باشد، آموزش لاراول راکت می‌تواند به شکل رایگان به شما لاراول را آموزش د...

آشنایی با امکانات جدید لاراول 6

آشنایی با امکانات جدید لاراول 6

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

آشنایی با امکانات جدید لاراول 5.3

آشنایی با امکانات جدید لاراول 5.3

لاراول ۵.۳ بزودی به طور رسمی ارائه میشه اما نسخه develop اون چند وقتی میشه که در اختیار کاربران قرار گرفته در این دوره آموزشی سعی میکنیم که امکانات و...

دسترسی رایگان برای اعضای ویژه

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آفلاین
user-avatar
Yousof Hosseinpour
1 ماه پیش

مهندس من تمامی موارد رو مانند شما جلو رفتم اما یک گیت من اجرا نمیشه و همیشه no رو برمیگردونه

آفلاین
user-avatar
حسام موسوی
1 ماه پیش

سلام یعنی چی no میده کدوم قسمت رو میفرمایید

آفلاین
user-avatar
ebi_papidon
2 ماه پیش

سلام

با توجه به مطالبی که آموزش دادید من یه گیتی رو به این صورت نوشتم مشابه همون چیزی که شما در ابتدا مینویسید

        foreach (Role::all() as $type) {
            Gate::define($type->label , function($user) use ($type){
                return $user->hasRole($type);
            });
        }

در مودل یوزر هم این متد وجود داره

public function hasRole($type)
    {
        ($this->roles->contains('label', $type->label, 'pivot_status', $type->pivot_status));
    }

من حالا میخوام دوتا شرط به این بدم.
یکی که تو جدول خود رول هستش و شرط بعدی رو بره از جدول واسط بخونه که آیا استتوس در چه وضعیتی هست اگر شرایط برقرار بود نمایش بده ولی یه جای کار مشکل داره که گیج شدم
ممنون میشم راهنمایی بفرمایید

آفلاین
user-avatar
حسام موسوی
2 ماه پیش

سلام
الان contains اینطوری مقدار دهی نمیشه فقط یه پارامتر میگیره
بعد اینکه به جای permission شما role دارید ؟

آفلاین
user-avatar
ebi_papidon
2 ماه پیش

من برای اینکه بتونم درک بهتری از مباحثی که شما تدریس میکنید داشته باشم روند پروژه و برای خودم تغییر دادم که فقط جنبه کپی از روی کدهای شما نباشه.

من در حقیقت اون جدول پکیجی که شما ایجاد میکنید به نام رول رو نساختم دیگه یه راست به جای permission همون رول رو قرار دادم که وظایف اونجا هستش.
و یه جدول واسطی دارم به نام role_user که ستونهایی دیگری هم داره که یکیش status هستش

من داکیومنت لاراول رو نگاه که کردم دیدم میشه گویا برای contains
یه پارامتر دیگه هم فرستاد و $this->roles چون بصورت کاکشن هستش میتونیم دسترسی هم داشته باشیم به جدول واسط رول یوزم که میتونم ازین طریق استوس رو مقدارش رو بگیرم
ولی مشکل من توی حلقه ای که رو گیت زدیم چون Roll:all() اجازه دسترسی به جدول واست رو نمیده
که بتونم شرط دیگه ای رو هم براش مثل همین لیبل ایجاد کنم که به جز اینکه میره لیبل رو نگاه میکنه که اسمش چیه که اونور ببینه کدوم کاربرها اون رو دارند حالا بتونم استوس جدول واست رو هم داشته باشم که به جز اون اسم ببینه آیا استوسش هم تو چه وضعیته که اگر اکی هستش بعد اجازه دسترسی رو به کاربر بده و به قولی can رو حالا اجرا کنه

امیدوارم تونسته باشم منظورم رو کامل و روان توضیح داده باشم
و در ضمن جا داره از تدریس خیلی خوبتون هم تشکر کنم واقعا خیلی تا اینجا مطالب عالی یاد گرفتم ازتون
ممنونم واقعا

آفلاین
user-avatar
حسام موسوی
2 ماه پیش

خوب یه راست نمیشه دیگه، اینجا acl برای هر پروژه تقریبا میتونم بگم ثابته، توضیح هم دادم، permissionها در بدنه کد باید استفاده بشن و role هم یه جور گروه بندیه الان شما با کدتون این داستان رو خراب کردید.
حالا داستان اون status رو که نمیدونم چیه ولی contains دوتا param میگیره یکی اسم فیلد و یکی مقدار
نه بیشتر طبق چیزی که حالا مستداتش آورده

آفلاین
user-avatar
ebi_papidon
2 ماه پیش

در روند پروژه ای که من ایجاد کردم اینطوریه که هرکاربر موقع ثبت نام خودش تعیین میکنه که چه نقشی بگیره برای همین دیگه به پکیجی دیدم خب لزومی نداره باشه چون یه نقش بیشتر نداره هر انتخاب
حالا در کنار اینکه اون نقش رو انتخاب میکنه که میره به جدول واست یه فیلدی هم هست به نام استوس
وقتی کاربر پنلش رو دریافت میکنه با توجه به نقشش یه عنوانی رو به پنلش افزوده میشه اما قبل اینکه فعالیت به کاربر داده بشه با توجه به نقش باید کاربر فرمی رو پر کنه و به ادمین ارسال کنه تا مورد تایید ادمین قرار بگیره یا نه
این استوس درواقع این نقش رو اینجا بازی میکنه یعنی من اینطور در نظر گرفتم که اگر label اول بتونم عنوان نقش رو از کاربر داشته باشم بعد با استوس که مثلا 1 به عنوان اینکه اول فیلد درخواست رو براش فعال کنه بعد ازینکه تایید کاربری رو گرفت مقدار استوس به 2 تغییر کنه که بعد کاربر تو اون حالت بتونه دسترسی پیدا کنه به فعالیتی که میتونه دراین قسمت با اون نقش داره بپردازه
یعنی اگر استوس 1 باشه اول فرم درخواست رو براش نمایش بده بعد که دو شد فرم درخواست دیگه نمایش داده نشه به جاش محتوی فعالیت رو براش نمایش بده

آفلاین
user-avatar
آرمان
2 ماه پیش

بسیار عالی و مفید بود

آفلاین
user-avatar
آرمان
2 ماه پیش

تشکر مشکل رفع شد

آفلاین
user-avatar
آرمان
2 ماه پیش

سلام در AutoServiceProvider در فانکشن boot وقتی به تعریف Gate میرسم دیگر برنامه اجرا نمیشه و هرچی () dd میکنم خالی برمیگردونه

آفلاین
user-avatar
داود خانی
3 ماه پیش

همیشه عالی.

آفلاین
user-avatar
حسام موسوی
3 ماه پیش

🌹🌹 سپاس

آفلاین
user-avatar
کیانوش
3 ماه پیش

سلام اقا حسام ، من مجبور شدم زمپ رو پاک کنم ، دوباره نصب کنم ، جدول laravelpro رو ساختم ولی وقتی می خوام دستور php artisan بزنم یا حتی php artisan migrate به این ارور بر می خورم :

PS C:\Users\kianoosh\Desktop\laravelpro> php artisan migrate

   Illuminate\Database\QueryException 

  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravelpro.permissions' doesn't exist (SQL: select * from `permissions`)

  at C:\Users\kianoosh\Desktop\laravelpro\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll format the error
    668|         // message to include the bindings with SQL, which will make this exception a
    669|         // lot more helpful to the developer instead of just the database's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675| 

  • A table was not found: You might have forgotten to run your migrations. You can run your migrations using `php artisan migrate`.
    https://laravel.com/docs/master/migrations#running-migrations

  1   [internal]:0
      Illuminate\Foundation\Application::Illuminate\Foundation\{closure}(Object(App\Providers\AuthServiceProvider))

  2   C:\Users\kianoosh\Desktop\laravelpro\vendor\laravel\framework\src\Illuminate\Database\Connection.php:331
      PDOException::("SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravelpro.permissions' doesn't exist")
آفلاین
user-avatar
حسام موسوی
3 ماه پیش

وارد AuthServiceProvider بشید و کد Gate رو غیر فعال کنید جداول که ایجاد شد دوباره فعال کنید

آفلاین
user-avatar
آرش
4 ماه پیش

با سلام
آیا تفاوتی در استفاده از متدهای مختلف در مبحث ACL از لحاظ پرفورمنسی وجود دارد؟
Gate
Policy
authorize()
middleware()
و can()
با تشکر فراوان

آفلاین
user-avatar
حسام موسوی
4 ماه پیش

خیر مهم پیاده‌سازی هست که برای ACL انجام میشه

آفلاین
user-avatar
reza ataei
4 ماه پیش

سلام...آموزشتون عالیه ولی این قسمت کاملا گیج کنندست..................

آفلاین
user-avatar
حسام موسوی
4 ماه پیش

اتفاقا برعکس خیلی ساده توضیح دادمش، قدم به قدم، آروم آروم