مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

Authorization در لاراول به زبان ساده


در آموزش قبل ما درباره روند تأیید اعتبار(authentication) در لاروال مطالبی را ارائه نمودیم. این آموزش برای شما توضیح می دهد که پروسه تخصیص مجوز(Authorization) در لاراول به چه نحوی می باشد.

تفاوت بین Authentication  و  Authorization

قبل از شروع بحث در مورد پروسه تخصیص مجوز در Laravel، اجازه دهید تفاوت بین احراز هویت و تخصیص مجوز را درک کنیم.در احراز هویت (Authentication)، برنامه وب یا یک سیستم از طریق اعتبار سنجی ، بررسی می کند که، کاربر مورد تایید هست یا خیر. هنگامی که ما تخصیص مجوز (Authorization) را توصیف می کنیم، تنها کاربران تایید شده را در نظر می گیریم.

بنابراین، احرازهویت (Authentication)، شامل بررسی اعتبارکاربران است، و تخصیص مجوز (Authorization) یعنی یک کاربر تایید شده مجوز دسترسی به چه منابعی را دارد.

 

مکانیزم تخصیص مجوز (Authorization) در لاراول

لاراول یک مکانیزم ساده برای تخصیص مجوز فراهم می کند که حاوی دو روش اصلی یعنی Gates و Policies است. معنای gate درگاه و دروازه هست و معنای policy سیاست می باشد.

 

Gate

لاراول برای پیاده سازی authorization از روش ACL سرنام کلمات Access Control List استفاده می کند. این قابلیت از ورژن 5.1.11  به لاراول اضافه شد.

■ Ability چیست؟

قبل از هرچیزی به تعریف ability می پردازیم. به هرعملیاتی که کاربران در برنامه می توانند انجام دهند ability می گویند. مانند: اضافه کردن post، ویرایش post، دیلیت post و...

 

■ Ability را کجا تعریف کنیم؟

Abilityها را داخل متد boot در فایل app/Providers/AuthServiceProvider تعریف می کنیم.

 

■ Ability را چگونه تعریف می کنیم؟

برای تعریف ability از کلاس Gate و از متد define استفاده می کنیم. متد define دو پارامتر می گیرد. پارامتر اول نام ability و پارامتر دوم، یک closure می باشد که در آن عملیاتی که میخواهیم چک شود را می نویسیم. مثلا برای عملیات update-post، کاربری می تواند، یک post را ویرایش کند که خود، نویسنده ی آن post باشد. برای این کار user_id نویسنده post، با user_id کاربری که قصد ویرایش post را دارد، مقایسه می شود. اگر هردو user_id برابر بود، این کاربر همان کاربری است که post را نوشته است و اجازه ویرایش به کاربر داده می شود و مقدار True برگردانده می شود در غیر این صورت تابع مقدار False را بر می گرداند، و به کاربر اجازه ویرایش داده نمی شود. برای این کار کدهای زیر را می نویسیم:

<?php

public function boot()

{

   $this->registerPolicies();


   Gate::define('update-post', function ($user, $post) {

       return $user->id == $post->user_id;

   });

}

 

■ چگونه از Ability ها استفاده کنیم؟

هم داخل Controller وهم داخل view ها می توانیم ability را چک کنیم.

در controlller ها

وارد کنترلر PostController می شویم. با استفاده از facade کلاس Gate و متدdenies ، متد update را ویرایش می کنیم.

   public function update(Request $request, $id)

   {

       $post = Post::find($id);

       if (Gate::denies('update-post', $post)){

           abort(403);

       };

       $post->title = $request->input('title');

       $post->body = $request->input('body');

       $post->save();

       return redirect()->route('post.index');

   }

متد  denies، دو آرگومان می گیرد. آرگومان اول نام ability و آرگومان دوم آیدی postی که قرار است ویرایش شود. متد denies اینگونه عمل می کند که اگر کاربری اجازه ویرایش مطلب یا post را نداشته باشد، ارور 403  نمایش داده می شود. شما می توانید به سبک و style موردنظر خود فایل view مربوط به ارور 403  را در مسیرresources/views/ errors  بسازید.

شما می توانید به جای متد denies از متد allows نیزاستفاده کنید. متد allows برعکس متد denies عمل می کند.

در view ها

داخل  viewها به وسیله دستور can ، نیز می توان ability را چک کرد.

@can('update-post', $post)

   <a href="/post/{{ $post->id }}/edit">Edit Post</a>

@endcan

در اینجا اگر کاربری که قصد ویرایش post را دارد، کاربری نباشد که post را نوشته باشد، به هیچ وجه دکمه ویرایش برای وی نمایش داده نمی شود.

Policy

وقتی پروژه به مرور زمان، گسترش می یابد و بزرگتر می شود، تعداد gate ها داخل متد boot در فایل app/Providers/AuthServiceProvider زیادتر می گردد. و خوانایی کدها به مراتب کمتر می گردد. برای حل این معزل و اینکه کدهای تمیزتر و خواناتری داشته باشیم، از روش دیگری به اسم policy ها استفاده می کنیم. که در ادامه به آن می  پردازیم.

در این روش به طور مجزا برای هر مدل یک Policy ایجاد می کنیم تا بتوانیم سطح دسترسی ها را گروه بندی کنیم بطوریکه برای مثال برای post های بلاگ  می توان کلاس  PostPolicy تعریف کنیم. و به همین شکل برای سایر model ها هم می توان کلاس policy تعریف نمود.

مرحله 1 - دستور آرتیسان زیر را برای ساخت policy در خط فرمان، وارد و اجرا می نماییم.

php artisan make:policy PostPolicy

 

مرحله 2 - بعد از ساخت کلاس وارد فایل app/Providers/AuthServiceProvider می شویم و کلاس Policyی که ساخته ایم را به مدل متناظر با آن Post مرتبط میکنیم و به آرایه $policies اضافه می کنیم.

protected $policies = [

        Post::class => PostPolicy::class,

    ];

 

مرحله 3 - فضای های نام (namespace) را به کلاس app/Providers/AuthServiceProvider اضافه کنید.

use App\Post;

use App\Policies\PostPolicy;

 

مرحله 4 - وارد کلاس PostPolicy می شویم و policy زیر را در آن می نویسیم.

 public function update(User $user, Post $post)

   {

       return $user->id === $post->user_id;

   }

 

فصلِ: 28 , تعداد قسمت ها: 253 , سطح: صفر تا صد

این فصل در یک نگاه:

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

برخی از سرفصل های این پکیج آموزشی :   لاراول چیست و چرا ما لاراول استفاده میکنیم کامپوزر کارش چیه و نصب اون نصب لاراول آموزش نصب لاراول از طریق اینستالر آموزش نصب لاراول با استفاده ا…
فصلِ: 1 , تعداد قسمت ها: 2 , سطح: متوسط

این فصل در یک نگاه:

بهترین و پر بازده ترین روش تبدیل بازدیدکننده سایت به مشتری تبلیغات هدفمند و برند سازی هوشمندانه با ایمیل می باشد. ایمیل…

  وبینار(سمینار آنلاین) آموزش تکنیک های ایمیل مارکتینگ   اگر تا انتها این متن را مطالعه کنید نظر شما در مورد ایمیل مارکتینگ 180 درجه عوض می شود!! بر هیچکس پوشیده نیست که از سال 1972 که ای…
فصلِ: 4 , تعداد قسمت ها: 368 , سطح: صفر تا صد

این فصل در یک نگاه:

مباحث تکمیلی فریم ورک لاراول…

فصل اول :آموزش مقدماتی فریم ورک لاراول معرفی فریم ورک لاراول و پیشنیازهای انجام کار انجام کانفیگ های اولیه برای نصب و راه اندازی فریم ورک معرفی روش های نصب پروژه لاراولی از طریق سایت گی…
فصلِ: 1 , تعداد قسمت ها: 155 , سطح: صفر تا صد

این فصل در یک نگاه:

مباحث مقدماتی فریم ورک react.js…

توضیحات کلی مجموعه: فصل اول : آشنایی با مباحث مقدماتی فریم ورک react.js نصب و راه اندازی node.js  و کلیه پیش نیازهای لازم نصب فریم ورک react روی لوکال و انجام تست های لازم آغاز آشنایی …

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید