64 lines
1.5 KiB
Python
Executable File
64 lines
1.5 KiB
Python
Executable File
from typing import TYPE_CHECKING
|
|
|
|
from rules import always_deny, predicate
|
|
|
|
from outbo.apps.core.rules import is_agency
|
|
from outbo.apps.products.rules import can_read_product
|
|
|
|
if TYPE_CHECKING:
|
|
from outbo.apps.authentication.models import User
|
|
from outbo.apps.photobriefing.models import Brief, BriefItem
|
|
|
|
|
|
# Brief
|
|
@predicate
|
|
def _has_readable_product(user: "User", brief: "Brief"):
|
|
return can_read_product.test(user, brief.product)
|
|
|
|
|
|
@predicate
|
|
def can_edit_brief(user: "User", brief: "Brief"):
|
|
return brief.editable_for_user(user=user)
|
|
|
|
|
|
@predicate
|
|
def can_publish_brief(user: "User", brief: "Brief"):
|
|
return brief.publishable_for_user(user=user)
|
|
|
|
|
|
@predicate
|
|
def can_complete_brief(user: "User", brief: "Brief"):
|
|
return brief.completable_for_user(user=user)
|
|
|
|
|
|
@predicate
|
|
def can_accept_brief(user: "User", brief: "Brief"):
|
|
return brief.acceptable_for_user(user=user)
|
|
|
|
|
|
# CRUD
|
|
can_create_brief = always_deny
|
|
can_read_brief = _has_readable_product
|
|
can_update_brief = (
|
|
can_edit_brief | can_publish_brief | can_accept_brief | can_complete_brief
|
|
)
|
|
can_delete_brief = always_deny
|
|
|
|
|
|
# BriefItem
|
|
@predicate
|
|
def _has_readable_brief(user: "User", brief_item: "BriefItem"):
|
|
return can_read_brief.test(user, brief_item.brief)
|
|
|
|
|
|
@predicate
|
|
def _has_editable_brief(user: "User", brief_item: "BriefItem"):
|
|
return can_edit_brief.test(user, brief_item.brief)
|
|
|
|
|
|
# CRUD
|
|
can_create_brief_item = is_agency
|
|
can_read_brief_item = _has_readable_brief
|
|
can_update_brief_item = always_deny
|
|
can_delete_brief_item = _has_editable_brief
|