Skip to content

Instantly share code, notes, and snippets.

@tkaemming
Created July 7, 2010 18:36
Show Gist options
  • Save tkaemming/467068 to your computer and use it in GitHub Desktop.
Save tkaemming/467068 to your computer and use it in GitHub Desktop.
from django import template
register = template.Library()
class PermissionNode(template.Node):
def __init__(self, user, permission, variable_name, obj=None):
self.user = template.Variable(user)
self.permission = template.Variable(permission)
if obj:
self.obj = template.Variable(obj)
else:
self.obj = None
self.variable_name = variable_name
def render(self, context):
user = self.user.resolve(context)
permission = self.permission.resolve(context)
if isinstance(self.obj, template.Variable):
obj = self.obj.resolve(context)
else:
obj = self.obj
context[self.variable_name] = user.has_perm(permission, obj)
return ''
@register.tag
def has_permission(parser, token):
"""
{% has_permission user permission [object] as variable_name %}
"""
bits = token.contents.split()
tag_name, user, permission = bits[0:3]
if bits[3] == 'as':
variable_name = bits[4]
obj = None
elif bits[4] == 'as':
variable_name = bits[5]
obj = bits[3]
else:
raise template.TemplateSyntaxError('%r should be in the format {%% user permission [object] as variable_name %%}.' % tag_name)
return PermissionNode(user, permission, variable_name, obj)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment