پیاده‌سازی سطوح دسترسی در پروژه

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

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

در این جلسه قصد دارم، سطوح دسترسی را که در جلسات گذشته مشغول به پیاده‌سازی آن بودیم را در بخش‌های مختلف برنامه مورد استفاده قرار دهم تا بتوانیم کاربران را از دسترسی به بخش‌های مختلف محدود کنیم.

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

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

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

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

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

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

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

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

مشاهده همه دوره ها
ساخت یک وبسایت آموزشی (فروشگاهی) با لاراول

ساخت یک وبسایت آموزشی (فروشگاهی) با لاراول

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

ساخت Restful Api با Laravel و Lumen

ساخت Restful Api با Laravel و Lumen

به زبان ساده، APIها (مخفف Application Programming Interface) رابط‌هایی نرم‌افزاری هستند که ارتباط بین نرم‌افزارهای مختلف را پیاده‌سازی می‌کنند. در دنی...

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

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

در همین ابتدای این دوره باید بگم کسانی میتونن این دوره رو مشاهده کنند که با لاراول آشنا باشن پس اگر هنوز نمی دونید که لاراول چطور کار میکنه ، لطف ابتد...

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

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

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

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

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

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آفلاین
user-avatar
mohammad lashkari
2 هفته پیش

سلام لطفا کمکم بکنین
برای من همیشه can مقدار false بر میگردونه
مدل user

    public function hasRole($roles)
    {
        return !! $roles->intersect($this->roles)->all();
    }

    public function hasPermission ($permission) {
        return $this->permissions->contains('name' , $permission->name) || $this->hasRole($permission->roles);
    }

AuthServiceProvider

        foreach (Permission::all() as $permission) {
            Gate::define($permission->name , function($user) use($permission) {
                return $user->hasPermission($permission);
            });
        }

Html

        @can('show-users')
            <li class="nav-item d-block d-lg-block">
                <a class="nav-link" data-toggle="collapse" href="#page-User" aria-expanded="false"
                   aria-controls="page-User">
                    <i class="fas fa-users menu-icon"></i>
                    <span class="menu-title">کاربران</span>
                    <i class="menu-arrow"></i>
                </a>
                <div class="collapse" id="page-User">
                    <ul class="nav flex-column sub-menu">
                        <li class="nav-item d-block d-lg-block {{ isActive('users.index') }}" >  <a class="nav-link"
                                                                                                    href="{{route('users.index')}}">لیست کاربران(مشتریان)</a></li>
                        <li class="nav-item d-block d-lg-block {{ isActive('usersAdmin.create') }}"> <a class="nav-link"
                                                                                                        href="{{route('usersAdmin.index')}}">لیست کاربران(ادمین)</a></li>
                        <li class="nav-item d-block d-lg-block {{ isActive('users.create') }}" > <a class="nav-link"
                                                                                                    href="{{route('users.create')}}">ثبت کاربر جدید</a>
                        </li>
                    </ul>
                </div>
            </li>
        @endcan
آفلاین
user-avatar
حسام موسوی
2 هفته پیش

درود بر شما آیا چک کردید که اصلا permission ای دارید یا نه ؟
در کد زیر لطفا چک کنید مقادیر permission چه چیزهای هستند

 foreach (Permission::all() as $permission) {
            Gate::define($permission->name , function($user) use($permission) {
                return $user->hasPermission($permission);
            });
        }

با dd راحت میتونید تست بفرمایید

آفلاین
user-avatar
mohammad lashkari
2 هفته پیش

استاد بنده از Guard دیگه ای استفاده کرده بودم حواسم بهش نبود و بعدش یوزر رو از طریق اون گاردی که ثبت کردم پر کردم و درست شد
اصلا داخل این foreach یوزر null بود که خداروشکر درست شد.
خیلی ممنونم از پاسخ گویی شما استاد محترم

آفلاین
user-avatar
navid
2 هفته پیش

سلام can توی ویو ها کار نمیکنه برای من. پرمیشن : show-users

@can('show-users')
            <li class="nav-item has-treeview {{ isActive(['admin.users.index' , 'admin.users.edit' , 'admin.users.create'] , 'menu-open') }}">
              <a href="#" class="nav-link {{ isActive(['admin.users.index' , 'admin.users.edit' , 'admin.users.create']) }}">
                <i class="fa fa-user nav-icon"></i>
                <p>
                  کاربران
                  <i class="right fa fa-angle-left"></i>
                </p>
              </a>
              <ul class="nav nav-treeview">
                <li class="nav-item has-treeview">
                  <a href="{{ route('admin.users.index') }}" class="nav-link {{ isActive('admin.users.index') }}">
                    <i class="fa fa-users nav-icon"></i>
                    <p>لیست کاربران</p>
                  </a>
                </li>
              </ul>
            </li>
          @endcan

auth seviceprovider

 public function boot()
    {
        $this->registerPolicies();

        foreach (Permission::all() as $permission) {
            Gate::define($permission->name , function($user) use($permission) {
                return $user->hasPermission($permission);
            });
        }
    }

مدل User:

public function hasRole($roles) {
        return !! $roles->intersect($this->roles->all());
    }
    public function hasPermission ($permission) {
        return $this->permissions->contains('name' , $permission->name) || $this->hasRole($permission->roles);
    }
آفلاین
user-avatar
navid
2 هفته پیش

مشکل از این خطه:

 return !! $roles->intersect($this->roles->all());

برای من این رو همیشه true برمیگردونه و وقتی با این کد:

$data = $roles->intersect($this->roles->all());

        if (sizeof($data) === 0) {
            return false;
        }
        return true;

چایگزینش میکنم درست میشه اون دوتا علامت تعجب کار نمیکنن واسه من گویا.ور›ن لاراولم Laravel Framework 7.18.0

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

بخاطر اینکه کد رو درست ننوشتید

    public function hasRole($roles)
    {
        return !! $roles->intersect($this->roles)->all();
    }

بببینید all رو به کدوم دادید اشتباها

آفلاین
user-avatar
navid
2 هفته پیش

ممنون و تشکر استاد عزیز

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

سلام استاد میخواستم بدونم در کد زیر

        if(Gate::allows('show-staff-users')){
            if(\request('admin')){
                $users->where('is_superuser', 1)->orWhere('is_staff', 1);
            }
        }else{
            $users->where('is_superuser', 0)->orWhere('is_staff', 0);
        }

نباید قسمت else دو تاش where باشه؟
یعنی

$users->where('is_superuser', 0)->Where('is_staff', 0);
آفلاین
user-avatar
حسام موسوی
3 ماه پیش

نه هر کدوم که باشه اوکی اگر هر دو رو where قرار بدید بهش میفهمونید کاربری که میخواد وارد بشه هم بیاد سوپر یوزر باشه هم کارمند !

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

استاد دقت کنید من قسمت else رو گفتم فقط
به نظر من باید جفتش where باشه (قست else)
و تست کردم وقتی orwhere هست حتی بدون داشتن show-staff-users میتونه ادمین رو ببینه کاربری که البته حداقل show-users رو داشته باشه
این کد مگه قرار نیست کسی که show-staff-users رو نداره کاربر هایه ادمین رو نبینه خو کاربر ادمین ما که هم is_superuser و هم is_staff جفتش که یک نیست
و شما دارید میگید هر کدوم که صفر بود رو نمایش بده در صورتی که باید هر دو صفر باشه تا کاربر ادمین نباشه!!
یعنی به عبارتی کد درست باید

        if(Gate::allows('show-staff-users')){
            if(\request('admin')){
                $users->where('is_superuser', 1)->orWhere('is_staff', 1);
            }
        }else{
            $users->where('is_superuser', 0)->Where('is_staff', 0);
        }
آفلاین
user-avatar
حسام موسوی
3 ماه پیش

دیگه اون else رو بردارید نیاز نیست وجود داشته باشه

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

وقتی else رو بردارم تمامی کاربران حتی ادمین نمایش داده میشه :(
این کد کد خودتونه فقط من orwhere رو داخل else , تغییر دادم به where
چون وقتی orwhere بود هم ادمین رو برمیگردوند
اگه میشه لطفا یک بار کد های این جلسه رو ببینید یا حتی جلسه بعد که کامل تره رو ببینید چون این فکر کنم اشتباهه (راستش اطمینان دارم اشتباه هست)
میتونید با کد های جلسه بعد به یک کاربر show-users رو بدید ولی show-staff-users رو ندید در کامل تعجب باز هم تمامی کاربران حتی ادمین رو میبینه داخل صفحه لیست کاربران تا وقتی که اون orwhere رو داخل قسمت else به where تبدیل کنید
اگه else رو هم پاک کنید باز تمام کاربران حتی ادمین نمایش داده میشه
میتونید برا یاد آوری اگه وقت دارید یک بار جلسه رو ببینید سریع (مرور کنید)
کد زیر کد شماست

public function index()
    {
        $users = User::query();

        if ($keyword = request('search')) {
            $users->where('email', 'LIKE', "%{$keyword}%")->orWhere('name', 'LIKE', "%{$keyword}%")->orWhere('id', $keyword);
        }

        if (\request('admin')) {
            $this->authorize('show-staff-users');
            $users->where('is_superuser', 1)->orWhere('is_staff', 1);
        }

        if (Gate::allows('show-staff-users')) {
            if (\request('admin')) {
                $users->where('is_superuser', 1)->orWhere('is_staff', 1);
            }
        } else {
            $users->where('is_superuser', 0)->orWhere('is_staff', 0);
        }

        $users = $users->latest()->paginate(20);
        return view('admin.users.all' , compact('users'));
    }

کد زیر با تغیراتی هست که دادم

    public function index()
    {
        $users = User::query();

        if($keyword = \request('search')){
            $users->where('email', 'LIKE', "%{$keyword}%")->orWhere('name', 'LIKE', "%{$keyword}%")->orWhere('id', $keyword);
        }

        if(Gate::allows('show-staff-users')){
            if(\request('admin')){
                $users->where('is_superuser', 1)->orWhere('is_staff', 1);
            }
        }else{
            $users->where('is_superuser', 0)->Where('is_staff', 0);
        }

        $users = $users->latest()->paginate(20);
        return view('admin.users.all', compact('users'));
    }

و کد زیر هم که خودتون فرمودید اضافه هست و فراموش کردید پاک کنید

        if (\request('admin')) {
            $this->authorize('show-staff-users');
            $users->where('is_superuser', 1)->orWhere('is_staff', 1);
        }
آفلاین
user-avatar
حسام موسوی
3 ماه پیش

بله درست میفرمایید الان که کدها رو رفتم دیدم باید where باشه هر دو نه orWhere
اون کد اضافه رو هم بله فراموش شد که پاک بشه متاسفانه

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

مرسی از ساپورت و پشتیبانی خوبتون
به جرات میشه گفت وبسایت راکت جزو بهتریناست هم پشتیبانیتون عالیه هم تدریستون و هم خیلی چیزایه دیگه مثل بخش بحث و گفت و گو و ...

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

این نظر لطف شماست واقعا

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

سلام استاد یه مشکل اینکه کسی که اجازه ویرایش کاربران رو داره میتونه پسورد سوپریوزر رو هم تغییر بده
و اینکه این قطعه کد

        if(\request('admin')){
            $this->authorize('show-staff-users');
            $users->where('is_superuser', 1)->orWhere('is_staff', 1);
        }

در قطعه کد زیر اضاف نیست آیا

    public function index()
    {
        $users = User::query();

        if($keyword = \request('search')){
            $users->where('email', 'LIKE', "%{$keyword}%")->orWhere('name', 'LIKE', "%{$keyword}%")->orWhere('id', $keyword);
        }

        if(\request('admin')){
            $this->authorize('show-staff-users');
            $users->where('is_superuser', 1)->orWhere('is_staff', 1);
        }

        if(Gate::allows('show-staff-users')){
            if(\request('admin')){
                $users->where('is_superuser', 1)->orWhere('is_staff', 1);
            }
        }else{
            $users->where('is_superuser', 0)->orWhere('is_staff', 0);
        }

        $users = $users->latest()->paginate(20);
        return view('admin.users.all', compact('users'));
    }

البته من هنوز جلسه بعد رو نگاه نکردم :)

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

بله اضافه‌اس احتمالا یا پاک کردم در ادامه یا اگر نه فراموشش کردم

آنلاین
user-avatar

با سلام و خسته نباشید خدمت جناب مهندس حسام موسوی و دوستان
به نظر بنده شخصی که مدیر بخش کاربران است و دسترسی کامل روی کاربران داره،نباید این اجازه رو داشته باشه که برای خودش دسترسی ثبت کنه
چون اونموقع میره دسترسی های دیگه رو برا خودش فعال میکنه و به بخش های مختلف ادمین پنل دسترسی پیدا میکنه
حالا دوستان بهتر از بنده میدون که میشه با دو تا شرط در قسمت PermissionControler برای کاربران این موضوع رو کنترل کرد.
باز هم تشکر فراوان دارم از جناب موسوی بابت آموزش های خوبشون
l

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

شما جلسه بعدی رو هم دیدید چون در اونجا برای کل بخش دسترسی هم همین برنامه اجازه دسترسی رو ست میکنیم !؟
و برای اینکه شخص نتونه اجازه دسترسی خودشو تغییر بده یه شرط ساده بزارید اگر ای دی شخص با ای دی کسی که لاگین کرده یکی باشه. نتونه تغییر بده تا الان باید یاد گرفته باشید که داستان چطور پیش میره

آنلاین
user-avatar

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

آفلاین
user-avatar
محمد نمازی
4 ماه پیش

باسلام
در صورت امکان در فصل نهم که در خصوص ورود، عضویت و ریست براساس پیامک صحبت خواهید کرد، از وب سرویس اعتبارسنجی پنل ها (مانند پنل قاصدک ) استفاده نمایید.

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

سلام
در صورت امکان حتما