پرش به محتویات

فایل ACCESS

بسته‌ها، اکشن‌های وضعیت و نقش‌هایی که یک پروژه همیشه دارد، به صورت کد - که مثل کد بازبینی می‌شود، و روی همه‌ی سیستم‌ها یکی است.

# config/access.py - CLEARANCE = {'ACCESS': 'config.access.ACCESS'}
ACCESS = {
    'bundles': {
        'Branch managers': {'shop.order_view': 'branch', 'shop.order_approve': 'branch'},
        'Accountants': {'shop.order_view': 'all', 'shop.order_view_price': None},
    },
    'status_actions': {                  # for a model keeping Django's permissions
        'shop.Payment': {
            'refund': {'field': 'state', 'to': ['refunded'], 'from': ['paid']},
        },
    },
    'roles': {                           # with clearance.roles installed
        'customer': {
            'name': 'Customer',
            'ceiling': ['shop.order_view', 'shop.order_create'],
            'bundles': ['Customers'],
        },
    },
}

bundles

{name: {permission: scope}}. مجوز به شکل app_label.codename است؛ دامنه کد یک دامنه است - all، یک دامنه‌ی کد، یک دامنه‌ی قانونی - یا None، برای پیش‌فرض مدل.

status_actions

{'app_label.Model': {code: spec}}، برای مدلی که مجوزهای Django را نگه داشته. مدلی که مجوزهای خودش را با build_permissions اعلام می‌کند، اکشن‌های وضعیتش را هم همان‌جا اعلام می‌کند.

کلید
field لازم فیلدی با گزینه، یا بولی
to لازم مقدارهایی که فقط این اکشن می‌نویسد
from اختیاری مقدارهایی که از آن‌ها می‌نویسد؛ اگر نیاید، از هر مقداری
name اختیاری چیزی که پنل ادمین نشان می‌دهد؛ اگر نیاید، خود کد، خواناشده

roles

وقتی clearance.roles نصب باشد. {code: spec}:

کلید
name اختیاری اگر نیاید، خود کد، خواناشده
ceiling اختیاری فهرستی از مجوزها؛ None برای بدون سقف؛ اگر نیاید، اجازه‌ی هیچ چیزی را نمی‌دهد، مثل نقش تازه
bundles اختیاری بسته‌های آغازین - تعریف‌شده در فایل، یا ساخته‌شده در پنل ادمین

چه چیزی مال فایل است

  • فایل صاحب چیزی است که نام می‌برد، و نه بیشتر. یک sync آنچه فایل اضافه می‌کند را می‌سازد، آنچه تغییر می‌دهد را تغییر می‌دهد، و آنچه زمانی نام می‌برد و دیگر نمی‌برد را حذف می‌کند. بسته، نقش یا اکشن وضعیتی که در پنل ادمین ساخته شده تا وقتی فایل اسمش را نبرد دست نمی‌خورد؛ از آن به بعد مال فایل است.
  • آنچه مال فایل است در پنل ادمین فقط‌خواندنی است - برای همه، ابرکاربر هم - چون sync بعدی آن را برمی‌گرداند.
  • اینکه بسته یا نقشی به چه کسی داده شود کار فایل نیست. این در پنل ادمین، یا در کد خود پروژه، می‌ماند.

اعمال آن

python manage.py clearance_sync --dry-run    # what would change, writing nothing
python manage.py clearance_sync --check      # in CI: fail when the database differs
python manage.py clearance_sync              # apply it, and say what changed

یا در هر migrate، با SYNC_ON_MIGRATE. یک sync قبل از نوشتن هر چیزی کامل فهرست می‌شود، و در یک تراکنش اعمال می‌شود: syncی که کسی را برای مدیریت دسترسی باقی نگذارد چیزی را تغییر نمی‌دهد. فایلی که خوانده نشود یا چیزی ناممکن بگوید موقع بالا آمدن رد می‌شود (E001)؛ اینکه هر مجوز و دامنه‌ای که نام می‌برد در پایگاه داده وجود دارد یا نه، کار --check است.