Files
2024-11-27 13:18:16 +01:00

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