Skip to content

Instantly share code, notes, and snippets.

@maxov
Created January 10, 2015 09:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxov/3e1a78d536e5ab8a4d02 to your computer and use it in GitHub Desktop.
Save maxov/3e1a78d536e5ab8a4d02 to your computer and use it in GitHub Desktop.
perms
from django.db.models import Q, F
from perms.spaces import QueryPermissionSpace
from repo.models import Project
space = QueryPermissionSpace()
@space.query_resolver('project.*')
def resolve_project_perms(perm, user):
return Project.objects.filter(
Q(teams__users=user) & (
Q(teams__is_owner_team=True) | Q(teams__permissions__slug=perm)
) | Q(namespace__organization__teams__users=user) & (
Q(namespace__organization__teams__projects__pk=F('pk')) | Q(namespace__organization__teams__is_all_projects=True)
) & (
Q(namespace__organization__teams__is_owner_team=True) | Q(namespace__organization__teams__permissions__slug=perm)
)
)
# can the user perform this? (uses query then .count() != 0)
space.perm('project.edit').can_perform(user, proj)
# for what objects can the user perform this? (uses the query)
space.perm('project.edit').where_can_perform(user)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment