احسان رضایی

یک توسعه دهنده

درس های yii2 شماره 11: کنترل سطح دسترسی، Access Control

در yii2 , / تاریخ ارسال 18-10-1395 / 1 نظر / آخرین ویرایش 29-12-1402

کنترل سطح دسترسی با احراز هویت framework ادغام شده تا اجازه یا محدود کردن دسترسی ها به امکانات و صفحات یک وبسایت را فراهم کند.

اگر تا کنون از access control استفاده نکرده اید، کد شما به همه اجازه دسترسی را خواهد داد حتی کاربرانی که login نشده اند!

با استفاده از access control در yii2 میتوان مطمئن شد کاربران قبل از دسترسی به امکانات یا صفحات وبسایت login کرده اند.

همچنین yii2 امکان مدیریت پیشرفته تر و پیچیده تری هم با عنوان RBAC ارائه میکند که بعدا بیشتر در مورد آن خواهم نوشت... . با استفاده از RBAC میتوان سلسله مراتب پیچیده ای از مجوز ها تعریف کرد مانند مجوز برای فعالیت هایی که ممکن است در application شما انجام شود.

به طور پیشفرض access control در yii2 دارای دو نقش(roles) میباشد. نقش مهمان یعنی کسی که هنوز login نکرده که با '?' نشان داده میشود و نقش احراز هویت شده یعنی کسی که در سایت login کرده و با '@' مشخص شده است.

با این دو نقش فقط میتوانیم دسترسی به صفحات یا action ها را محدود کنیم بر اساس اینکه کاربر login شده یا خیر و اگر login نبود میتوان آن را به صفحه ی ورود هدایت کرد.

اگر از ابزار gii استفاده کرده باشید داخل controller در متد behaviors چیزی شبیه به کد زیر را خواهید دید

use yii\web\Controller;
use yii\filters\AccessControl;

class SiteController extends Controller
{    
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['login', 'logout', 'signup'],
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['login', 'signup'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout'],
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
    // ...
}

only مشخص میکند کنترل سطح دسترسی برای چه action هایی اعمال شود.

در بخش rules سطوح دسترسی تعریف میشود به عنوان مثال:

[
    'allow' => true,
    'actions' => ['login', 'signup'],
    'roles' => ['?'],
]

به معنی اجازه دسترسی کاربران login نشده به action ها یا صفحات ورود و ثبت نام میباشد و در قسمت:

[
    'allow' => true,
    'actions' => ['logout'],
    'roles' => ['@'],
]

مشخص میکند action یا صفحه ی خروج/logout تنها برای کاربرانی که در نرم افزار login هستند قابل دسترس باشد.

پیشنهاد

کتاب‌ها

کتاب الگوهای طراحی به بیان ساده(design patterns / دیزاین پترن)

در مهندسی نرم افزار، design patterns(الگوهای طراحی) راه حل‌های قابل استفاده برای مشکلاتی هستند که معمولاً در طراحی نرم‌افزار اتفاق می افتند.

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

کتاب refactoring / ریفکتورینگ

Refactoring مجموعه‌ای از تکنیک‌هاست که به منظور اصلاح و بهبود کدهای قبلی بدون تغییر در عملکرد و رفتارشان جهت خوانایی، کارامدی و قابلیت نگهداری بیشتر انجام می‌شود.

در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.

refactoring یک سرمایه‌گذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینه‌های توسعه نرم‌افزار در آینده خواهد شد.

ارسال نظر

محمدرضا سلطانی در تاریخ 1395/11/03 - 10:14 نوشته
سلام. خیلی عالی و مفیده. اگر این مقالات رو ادامه بدی خیلی ها استفاده میکنن
پاسخ احسان: ممنون :)حتما این کارُ انجام میدم.