workerها و websocketها¶
مجوزها و قانونهای یک شخص یک بار خوانده میشوند و روی شیء کاربر نگه داشته میشوند، همانطور که Django مجوزهای یک شخص را نگه میدارد - پس یک درخواست، هر چند فهرست که نشان دهد، تعداد ثابتی بار از پایگاه داده میپرسد.
درخواست تمام میشود، و شیء کاربر همراهش. پردازهای که از یک درخواست بیشتر عمر میکند - یک worker در Celery، یک consumer در websocket، یک دستور مدیریتی طولانی - شیء کاربر را هر چقدر بخواهد نگه میدارد، و همراهش آنچه شخص موقع خوانده شدن داشت.
شخص را دوباره بخوانید¶
جایی که دسترسی ممکن است از آن موقع تغییر کرده باشد، دربارهی یک شیء کاربر تازه بپرسید:
یا آنچه نگه داشته شده را فراموش کنید، تا پرسش بعدی دوباره بخواندش:
forget_grants مجوزهای نگهداشتهی کتابخانه و cacheهای مجوز خود Django را با هم
فراموش میکند، پس has_perm هم دوباره میخواند.
کاری که به جای کسی اجرا میشود¶
کلید شخص را بفرستید، نه خود شخص را:
@shared_task
def export_orders(user_id):
user = User.objects.get(pk=user_id)
rows = Order.objects.visible_to(user)
...
کاری که یک ساعت پیش در صف گذاشته شده، با آنچه شخص الان دارد اجرا میشود - مجوزی که گرفته شده، برای آن کار هم گرفته شده است.