تأییدی که فقط بعضی میتوانند بدهند¶
هر کسی که بتواند وامی را ویرایش کند میتواند اصلاحش کند؛ فقط مدیر آن را تأیید میکند، فقط تا وقتی در انتظار است، و هیچوقت وام خودش را نه.
۱. اکشن¶
یک اکشن وضعیت - در مدل:
class Loan(models.Model):
...
class Meta:
default_permissions = ()
permissions = build_permissions(
'loan',
_('loans'),
actions=(*DEFAULT_ACTIONS, 'approve'),
status_actions={
'approve': {'field': 'status', 'to': ['approved', 'rejected'], 'from': ['pending']},
},
)
یا بدون کد، در پنل ادمین، دسترسی، اکشنها - اکشنها را
ببینید. در هر دو حالت loans.loan_approve ساخته میشود، بدون دارنده.
۲. چه کسی میتواند¶
loan_approve را به بستهی مدیرها بدهید، با دامنهای که در آن تأیید میکنند -
شعبهشان، منطقهشان. به کسی که آن را ندارد در هیچ فرمی approved یا rejected
پیشنهاد نمیشود، و API هر کدام را رد میکند و اسم فیلد را میبرد.
۳. هیچوقت مال خودش¶
این دربارهی ردیف است، نه شخص، پس یک hook در policy است:
from clearance.policies import BasePolicy
from clearance.registry import registry
class LoanPolicy(BasePolicy):
model = Loan
def can_approve(self, user, obj=None):
if not self.has_within_scope(user, 'approve', obj):
return False
return obj is None or obj.applicant_id != user.pk
loan_access = registry.register(LoanPolicy)
از اکشن وضعیت با خود ردیف از policy پرسیده میشود، پس این hook هر جا که وضعیت نوشته شود برقرار است - پنل ادمین، یک فرم، API.