مهدی اردشیر
مهدی اردشیر
خواندن ۳ دقیقه·۳ سال پیش

ACL چیست


سلام دوستان امیدوارم خوب باشید امروز قرار درباره acl صحبت کنم .

بیشتر ما ها در جاهای مختلف این سیستم را دیده ایم ولی زیاد به ان دقت نکردیم و بقیه دوستانی که دقت کردن مایل بودن بدونن که چجوری باید این سیستم را راه اندازی کنن

ACL چیست

Access Control List

لیست کنترل سطح دسترسی

همان طور که گفتم بیشتر جا ها ما به اون برخورد کردیم مثل تلگرام وسایت های مختلف و...

حتما میدونید که پنل یا کارهایی که افراد مختلف در سایت انجام میدن فرق میکنه

مثلا مدیر سایت باید به کل سایت دسترسی داشته باشه

ویراستار باید به بخش مقالات دسترسی داشته باشه

و مسئول محصولات باید به بخش کنترل محصولات دسترسی داشته

به صورت منطقی ویراستار نباید به بخش محصولات و مسئول محصولات نباید به بخش مقالات دسترسی داشته باشه و اینکه هر کدام از افراد به غیر از مدیر نباید به بخش های غیر مرتبط مسئولیت خود دسترسی داشته باشند

نحوه پیاده سازی

اول باید یک جدول به نام دسترسی ها (Permissions) برای ذخیره کردن دسترسی ها ایجاد کنیم که باید دارای 3 ستون باشد اول ایدی (id) - دوم نام دسترسی (name) و سوم توضیح دسترسی (lable)

جدول دسترسی ها
جدول دسترسی ها

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

این جدول باید 2 ستون داشته باشد

اولین ستون نام ان به، صورت مثال باید user_id باشد و این ستون باید به جدول user و ستون ایدی(id) وصل شود و رابطه داشته باشد

برای ستون دوم هم مثل بالا باید یک ستون به نام permission_id ایجاد کنید و ان را به جدول دسترسی ها (permissions) و ستون ایدی (id) متصل کنیم

جدول واسط بین کاربر و دسترسی ها
جدول واسط بین کاربر و دسترسی ها


در اینجا منظور از دسترسی به، صورت مثال مشاهده کاربران،ویرایش کاربران،ویرایش مقاله ،حذف مقاله ،افزودن محصول و... هست

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

یه جدول مثل جدول دسترسی ها با نام مقام ها (roles) با ستون های ایدی (id)- دوم نام مقام(name) و سوم توضیح مقام(lable) میسازیم

جدول مقام ها
جدول مقام ها


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

خوب اولین ستون جدول واسط role_id است که به جدول مقام ها و ستون id به ان وصل شود و رابطه ایجاد شود. ستون دوم هم به نام permission_id که باید به جدول دسترسی ها و ستون id ان وصل و رابطه ایجاد شود

در قدم بعدی باید یک جدول واسط دیگر بین مقام ها (roles) و کاربران(users) ایجاد کنیم تا تعیین کنیم این کاربر چه مقام هایی دارد

مانند بالا یک ستون به اسم user_id که به جدول کاربران و ستون ایدی متصل شده و رابطه ایجاد شده

ستون دوم هم به اسم role_id که به جدول مقام ها و ستون ایدی متصل شده و رابطه ایجاد شده

جدول رابط بین مقام و کاربر
جدول رابط بین مقام و کاربر

تئوری acl به این شکل بود

حالا با استفاده از روابط ایجاد شده بین جداول الان میتوانید چک کنید که کاربر به این بخش دسترسی داره یا نه

سعی کردم به صورت ساده توضیح بدم و اگر نکته جدیدی پیدا کردم براتون در اینجا به اشتراک میذارم

و اینکه اگه در اینده وقت کردم مثال پیاده سازی acl رو توی لاراول می نویسم و سورسش رو براتون اپلود میکنم



laravelلاراولکنترل دسترسیaclphp
Web Debeloper php-laravel-wordpress
شاید از این پست‌ها خوشتان بیاید