
روز ۲۶: سطح دسترسیها و Permissionها در Django
در هر وبسایت یا اپلیکیشن، کنترل دسترسی کاربران یکی از کلیدیترین بخشها برای امنیت، سازماندهی و تجربه کاربری است. جنگو با سیستم احراز هویت و مدیریت کاربران، امکان تعریف سطوح دسترسی و Permissionهای دقیق را فراهم کرده است تا توسعهدهندگان بتوانند کنترل کاملی بر روی اینکه چه کسی به چه چیزی دسترسی دارد، اعمال کنند. این سیستم شامل گروهها (Groups)، Permissionهای پیشفرض برای مدلها، و امکان ایجاد Permissionهای سفارشی است و باعث میشود کاربران غیرمجاز نتوانند به بخشهای حساس سایت دسترسی پیدا کنند. یادگیری نحوه مدیریت Permissionها و سطوح دسترسی پایهای برای طراحی سیستمهای امن و حرفهای در جنگو است و تضمین میکند که دادهها و عملکردها تنها در اختیار کاربران مجاز قرار میگیرد.
سطوح دسترسی پیشفرض در جنگو
جنگو برای هر مدل سه Permission پیشفرض ایجاد میکند: add, change, و delete. این سه Permission به توسعهدهنده اجازه میدهد کنترل دقیقی روی ایجاد، ویرایش و حذف دادهها داشته باشد. علاوه بر این، برای کاربران سوپر یوزر (Superuser) دسترسی کامل به همه بخشها و عملیاتها فراهم است. این سیستم پیشفرض باعث میشود توسعهدهنده بتواند بدون نوشتن کد اضافی، سطح دسترسی استاندارد و امن ایجاد کند و در صورت نیاز آن را گسترش دهد.
استفاده از گروهها (Groups) برای مدیریت Permissionها
Groups در جنگو ابزاری قدرتمند برای دستهبندی کاربران با Permissionهای مشابه است. به جای اختصاص دادن Permissionها به تکتک کاربران، میتوان گروههایی با نقشهای مشخص مانند مدیر، ویراستار یا کاربر عادی تعریف کرد و کاربران را به گروههای مناسب اضافه نمود. این روش باعث میشود مدیریت دسترسیها در پروژههای بزرگ ساده و استاندارد باقی بماند و تغییرات به سرعت روی تمامی کاربران اعمال شود.
from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType from myapp.models import Article # ایجاد گروه ویراستار و اختصاص Permission editor_group, created = Group.objects.get_or_create(name='Editor') content_type = ContentType.objects.get_for_model(Article) permission = Permission.objects.get(codename='change_article', content_type=content_type) editor_group.permissions.add(permission)
در این مثال، گروهی به نام Editor ایجاد شده و Permission ویرایش مقالات به آن اختصاص داده شده است. با اضافه کردن کاربران به این گروه، دسترسی لازم به آنها داده میشود.
استفاده از decoratorها برای کنترل دسترسی در Viewها
برای اعمال محدودیتهای دسترسی در سطح View، جنگو چند decorator ارائه میدهد که مهمترین آنها permission_required است. با استفاده از این decorator میتوان مشخص کرد که چه کاربران یا گروههایی اجازه دسترسی به یک View مشخص را دارند. این روش باعث میشود کنترل دسترسی به صورت مرکزی و استاندارد انجام شود و امنیت سایت حفظ شود.
from django.contrib.auth.decorators import permission_required
@permission_required('myapp.change_article', raise_exception=True)
def edit_article(request, article_id):
# کد ویرایش مقاله
passدر این مثال، تنها کاربران با Permission change_article میتوانند به این View دسترسی داشته باشند و سایر کاربران با خطای دسترسی مواجه میشوند. این روش امنیت و شفافیت را در مدیریت دسترسی افزایش میدهد.
ایجاد Permissionهای سفارشی
علاوه بر Permissionهای پیشفرض، میتوان Permissionهای سفارشی برای مدلها یا Viewهای خاص ایجاد کرد. این قابلیت به توسعهدهندگان اجازه میدهد محدودیتها و قوانین خاص پروژه را به راحتی اعمال کنند. ایجاد Permissionهای سفارشی نیازمند تعریف آنها در کلاس Meta مدل یا استفاده از ابزار مدیریت Permissionها در Admin است و انعطاف بالایی برای توسعه سیستمهای حرفهای فراهم میکند.
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
class Meta:
permissions = [
('publish_article', 'Can publish article'),
('archive_article', 'Can archive article'),
]در این مثال، دو Permission سفارشی به مدل Article اضافه شده است که میتوان آنها را در گروهها یا کاربران خاص اختصاص داد و به شکل دقیق کنترل دسترسی را انجام داد.
نمایش و مدیریت Permissionها در Admin
جنگو Admin امکان مشاهده و مدیریت Permissionها و گروهها را به راحتی فراهم میکند. از طریق این رابط، میتوان کاربران را به گروهها اضافه کرد، Permissionهای اضافی اختصاص داد و سطح دسترسی هر کاربر را بررسی کرد. این ابزار برای توسعهدهندگان و مدیران سایت اهمیت زیادی دارد و باعث میشود مدیریت کاربران و دسترسیها بدون نیاز به نوشتن کد پیچیده انجام شود.
جمعبندی روز بیست و ششم
در روز بیست و ششم، با سطح دسترسیها و Permissionها در جنگو آشنا شدیم. یاد گرفتیم چگونه از Permissionهای پیشفرض مدلها استفاده کنیم، گروهها را برای مدیریت سادهتر کاربران ایجاد کنیم، decoratorهای کنترل دسترسی در Viewها به کار ببریم و Permissionهای سفارشی بسازیم. همچنین دیدیم چگونه Admin جنگو ابزار قدرتمندی برای مدیریت کاربران و دسترسیها فراهم میکند. تسلط بر این بخش باعث میشود پروژههای جنگو امن، حرفهای و استاندارد باشند و توسعهدهندگان بتوانند سیستمهای پیچیده با دسترسیهای دقیق و کنترل شده ایجاد کنند. یادگیری درست سطح دسترسیها و Permissionها پایهای محکم برای طراحی اپلیکیشنهای امن، وبسایتهای حرفهای و ارائه تجربه کاربری مناسب است و تضمین میکند که تنها کاربران مجاز قادر به انجام عملیات حساس باشند.