Initial commit from ZIP
This commit is contained in:
commit
378d4692a9
454 files changed
+40367
No files matched your search
Executable
+42
@@ -0,0 +1,42 @@
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from rules import predicate, always_deny
|
||||
|
||||
from outbo.apps.core.rules import is_supplier, is_agency, is_client
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from outbo.apps.projects.models import Project, Member
|
||||
|
||||
|
||||
@predicate
|
||||
def _project_published(_, project: "Project"):
|
||||
return project.published
|
||||
|
||||
|
||||
can_publish_project = is_supplier & ~_project_published
|
||||
|
||||
can_create_project = is_supplier
|
||||
can_read_project = is_supplier | is_agency | (is_client & _project_published)
|
||||
|
||||
can_update_project = can_publish_project
|
||||
can_delete_project = always_deny
|
||||
|
||||
|
||||
@predicate
|
||||
def _can_remove_this_member(user: "User", member: "Member"):
|
||||
project = member.project
|
||||
all_memberships = project.members
|
||||
current_user_membership = all_memberships.filter(user=user).first()
|
||||
if current_user_membership is None:
|
||||
return False
|
||||
current_role_memberships = all_memberships.filter(role=current_user_membership.role)
|
||||
return (
|
||||
member.role == current_user_membership.role
|
||||
and current_role_memberships.count() > 1
|
||||
)
|
||||
|
||||
|
||||
can_create_project_member = is_supplier
|
||||
can_read_project_member = always_deny
|
||||
can_update_project_member = always_deny
|
||||
can_delete_project_member = _can_remove_this_member
|
||||
Reference in new issue
Block a user