-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- move all predicates to corresponding package
- Loading branch information
Showing
6 changed files
with
92 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,54 +1,18 @@ | ||
import rules | ||
from rules.predicates import is_superuser | ||
|
||
from euth.phases import content | ||
from euth.modules.predicates import (is_context_member, is_context_moderator, | ||
is_owner) | ||
from euth.phases.predicates import phase_allows_create, phase_allows_modify | ||
|
||
from . import models | ||
from .models import Idea | ||
|
||
|
||
@rules.predicate | ||
def is_active_phase(project, phase_type): | ||
return[content.active_phase.type] == phase_type | ||
rules.add_perm('ideas.modify_idea', | ||
is_superuser | is_context_moderator | | ||
(is_context_member & is_owner & phase_allows_modify)) | ||
|
||
|
||
@rules.predicate | ||
def is_moderator(user, project): | ||
return user in project.moderators.all() | ||
|
||
|
||
@rules.predicate | ||
def is_member(user, project): | ||
return ( | ||
(project.is_public and user.is_authenticated()) | ||
or user in project.participants.all()) | ||
|
||
|
||
def has_feature_active(project, model, feature): | ||
if not project.active_phase: | ||
return False | ||
else: | ||
return project.active_phase.has_feature('crud', model) | ||
|
||
|
||
@rules.predicate | ||
def is_owner(user, item): | ||
return item.creator == user | ||
|
||
|
||
@rules.predicate | ||
def can_modify_idea(user, idea): | ||
return ( | ||
is_moderator(user, idea.project) | ( | ||
is_owner(user, idea) & | ||
is_member(user, idea.project) & | ||
has_feature_active(idea.project, models.Idea, 'crud'))) | ||
|
||
|
||
@rules.predicate | ||
def can_create_idea(user, module): | ||
return ( | ||
is_moderator(user, module.project) | ( | ||
is_member(user, module.project) & | ||
has_feature_active(module.project, models.Idea, 'crud'))) | ||
|
||
rules.add_perm('ideas.modify_idea', can_modify_idea) | ||
rules.add_perm('ideas.create_idea', can_create_idea) | ||
rules.add_perm('ideas.create_idea', | ||
is_superuser | is_context_moderator | | ||
(is_context_member & phase_allows_create(Idea))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
import rules | ||
|
||
from euth.projects.predicates import is_member, is_moderator | ||
|
||
|
||
@rules.predicate | ||
def is_context_moderator(user, item): | ||
return is_moderator(user, item.project) | ||
|
||
|
||
@rules.predicate | ||
def is_context_member(user, item): | ||
return is_member(user, item.project) | ||
|
||
|
||
@rules.predicate | ||
def is_owner(user, item): | ||
return item.creator == user |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import rules | ||
|
||
|
||
def has_feature_active(project, model, feature): | ||
if not project.active_phase: | ||
return False | ||
else: | ||
return project.active_phase.has_feature(feature, model) | ||
|
||
|
||
@rules.predicate | ||
def phase_allows_modify(user, item): | ||
return has_feature_active(item.project, item.__class__, 'crud') | ||
|
||
|
||
def phase_allows_create(item_class): | ||
@rules.predicate | ||
def _create_predicate(user, module): | ||
print(user, module, item_class) | ||
return has_feature_active(module.project, item_class, 'crud') | ||
return _create_predicate | ||
|
||
|
||
@rules.predicate | ||
def phase_allows_comment(user, item): | ||
return has_feature_active(item.project, item.__class__, 'comment') | ||
|
||
|
||
@rules.predicate | ||
def phase_allows_rate(user, item): | ||
return has_feature_active(item.project, item.__class__, 'rate') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import rules | ||
|
||
|
||
@rules.predicate | ||
def is_member(user, project): | ||
return project.has_member(user) | ||
|
||
|
||
@rules.predicate | ||
def is_public(user, project): | ||
return project.is_public | ||
|
||
|
||
@rules.predicate | ||
def is_live(user, project): | ||
return not project.is_draft | ||
|
||
|
||
@rules.predicate | ||
def is_initiator(user, project): | ||
return user in project.organisation.initiators.all() | ||
|
||
|
||
@rules.predicate | ||
def is_moderator(user, project): | ||
return user in project.moderators.all() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,8 @@ | ||
import rules | ||
from rules.predicates import is_superuser | ||
|
||
from .predicates import is_initiator, is_live, is_member, is_public | ||
|
||
@rules.predicate | ||
def is_member(user, project): | ||
return project.has_member(user) | ||
|
||
|
||
@rules.predicate | ||
def is_live(user, project): | ||
return not project.is_draft | ||
|
||
|
||
@rules.predicate | ||
def is_initiator(user, project): | ||
return user in project.organisation.initiators.all() | ||
|
||
|
||
rules.add_perm('projects.view_project', is_initiator | is_member & is_live) | ||
rules.add_perm('projects.view_project', | ||
is_superuser | is_initiator | | ||
((is_public | is_member) & is_live)) |