پیشفرض، رد کردن است¶
کنترل دسترسی از دو طرف خراب میشود، و این دو به یک اندازه دیده نمیشوند.
بیش از اندازه رد کردن فوراً دیده میشود. کسی که رد شده میگوید - همان روز، معمولاً در همان ساعت - و درست میشود.
بیش از اندازه نشان دادن را هیچ کس نمیبیند. مشتریای که سفارشهای مشتری دیگر را میخواند شکایت نمیکند؛ مدیری که قیمت را میبیند نمیدانست نباید ببیند. چیزی خطا نمیدهد، چیزی ثبت نمیشود، و اگر پیدا شود، کسی پیدایش میکند که دنبالش میگشته.
پس هر جای خالیای که کتابخانه ممکن است بگذارد، طوری ساخته شده که به سمتی بیفتد که دیده میشود:
| جای خالی | یعنی |
|---|---|
| کسی که چیزی به او داده نشده | هیچ چیزی ندارد |
| مجوزی که بدون دامنه داده شده | به هیچ ردیفی نمیرسد، مگر مدل پیشفرضی انتخاب کرده باشد |
| دامنهی قانونیای که فیلدش رفته | به هیچ ردیفی نمیرسد، نه به همه |
| فیلدی که محافظتشده علامت خورده | کنار گذاشته میشود، تا مجوزی آن را بدهد |
| اکشنی که در کد پیدا شده | هیچ کس آن را ندارد، تا داده شود |
| سقف یک نقش | جلوی هر چیزی را که هر بستهای بدهد میگیرد |
| viewای که نمیتواند بگوید از کدام policy بپرسد | موقع بالا آمدن پروژه رد میشود |
| پنل ادمینی که مال کتابخانه نیست | موقع بالا آمدن پروژه رد میشود |
| کسی که وارد نشده، یا حسابش غیرفعال است | هر backendی که نصب باشد، هیچ چیزی ندارد |
چرا موقع بالا آمدن پروژه¶
viewای که نمیتواند از policy بپرسد میتوانست وقتی صدا زده میشود رد شود - و روزی پیدا میشد که کسی صدایش بزند، شاید همان روزی که منتشر شده. اگر موقع بالا آمدن پروژه رد شود، کسی پیدایش میکند که پروژه را بالا میآورد: برنامهنویس، پیش از هر کس دیگری. بررسیهای سیستمی Django همان لحظهاند، و هر بررسیای که کتابخانه اضافه میکند یکی از آنهاست.
آنچه از یک پروژه میخواهد¶
کمی بیشتر گفتن. مدلی که میخواهد هر مجوزی به همهی ردیفها برسد میگوید
default_scope = 'all'؛ viewای که رکوردی ندارد مجوزی را که لازم دارد نام میبرد؛
دادهی مرجعی که همه میخوانند این را با SignedInReadQuerySet میگوید. هر کدام یک خط
است، که یک بار نوشته میشود، همان جایی که تصمیم گرفته میشود - به جای نشتیای که جایی
که انتظارش نمیرفت پیدا شود.