147 lines
3.1 KiB
Python
Executable File
147 lines
3.1 KiB
Python
Executable File
from typing import TYPE_CHECKING, Union
|
|
|
|
from rules import predicate, always_deny, always_allow
|
|
|
|
from outbo.apps.projects.rules import can_read_project
|
|
|
|
if TYPE_CHECKING:
|
|
from outbo.apps.authentication.models import User
|
|
from outbo.apps.products.models import (
|
|
Product,
|
|
Brief,
|
|
Draft,
|
|
FirstFinal,
|
|
PrintingFiles,
|
|
)
|
|
|
|
|
|
# Product
|
|
@predicate
|
|
def _has_readable_project(user: "User", product: "Product"):
|
|
return can_read_project.test(user, product.project)
|
|
|
|
|
|
# CRUD
|
|
can_create_product = always_deny
|
|
can_read_product = _has_readable_project
|
|
can_update_product = always_deny
|
|
can_delete_product = always_deny
|
|
|
|
# Shared
|
|
@predicate
|
|
def _has_readable_product(user: "User", obj: Union["Brief", "Draft"]):
|
|
return can_read_product.test(user, obj.product)
|
|
|
|
|
|
# Brief
|
|
@predicate
|
|
def can_publish_brief(user: "User", brief: "Brief"):
|
|
return brief.publishable_for_user(user=user)
|
|
|
|
|
|
@predicate
|
|
def can_edit_brief(user: "User", brief: "Brief"):
|
|
return brief.editable_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_accept_brief
|
|
can_delete_brief = always_deny
|
|
|
|
|
|
@predicate
|
|
def _has_editable_brief(user, photo_or_blanking):
|
|
return can_edit_brief.test(user, photo_or_blanking.brief)
|
|
|
|
|
|
# Brief files:
|
|
can_delete_photo = _has_editable_brief
|
|
can_delete_blanking = _has_editable_brief
|
|
|
|
|
|
# Draft
|
|
@predicate
|
|
def can_edit_draft(user: "User", draft: "Draft"):
|
|
return draft.editable_for_user(user=user)
|
|
|
|
|
|
@predicate
|
|
def can_accept_draft(user: "User", draft: "Draft"):
|
|
return draft.acceptable_for_user(user=user)
|
|
|
|
|
|
# CRUD
|
|
can_create_draft = always_deny
|
|
can_read_draft = _has_readable_product
|
|
can_update_draft = can_edit_draft | can_accept_draft
|
|
can_delete_draft = always_deny
|
|
|
|
# Draft Files
|
|
|
|
|
|
# CRUD
|
|
can_create_draft_file = always_allow
|
|
can_read_draft_file = always_allow
|
|
can_update_draft_file = always_deny
|
|
can_delete_draft_file = always_deny
|
|
|
|
# FF
|
|
@predicate
|
|
def can_edit_ff(user: "User", ff: "FirstFinal"):
|
|
return ff.editable_for_user(user=user)
|
|
|
|
|
|
@predicate
|
|
def can_accept_ff(user: "User", ff: "FirstFinal"):
|
|
return ff.acceptable_for_user(user=user)
|
|
|
|
|
|
# CRUD
|
|
can_create_ff = always_deny
|
|
can_read_ff = _has_readable_product
|
|
can_update_ff = can_edit_ff | can_accept_ff
|
|
can_delete_ff = always_deny
|
|
|
|
# Draft Files
|
|
|
|
|
|
# CRUD
|
|
can_create_ff_file = always_allow
|
|
can_read_ff_file = always_allow
|
|
can_update_ff_file = always_deny
|
|
can_delete_ff_file = always_deny
|
|
|
|
|
|
# PF
|
|
@predicate
|
|
def can_edit_pf(user: "User", pf: "PrintingFiles"):
|
|
return pf.editable_for_user(user=user)
|
|
|
|
|
|
@predicate
|
|
def can_accept_pf(user: "User", pf: "PrintingFiles"):
|
|
return pf.acceptable_for_user(user=user)
|
|
|
|
|
|
# CRUD
|
|
can_create_pf = always_deny
|
|
can_read_pf = _has_readable_product
|
|
can_update_pf = can_edit_pf | can_accept_pf
|
|
can_delete_pf = always_deny
|
|
|
|
# Draft Files
|
|
|
|
|
|
# CRUD
|
|
can_create_pf_file = always_allow
|
|
can_read_pf_file = always_allow
|
|
can_update_pf_file = always_deny
|
|
can_delete_pf_file = always_deny
|