django-authority/authority/forms.py
Jannis Leidel 71eee85b85 Moved authority app from src/ to root directory
--HG--
rename : src/authority/__init__.py => authority/__init__.py
rename : src/authority/admin.py => authority/admin.py
rename : src/authority/decorators.py => authority/decorators.py
rename : src/authority/exceptions.py => authority/exceptions.py
rename : src/authority/fixtures/tests.json => authority/fixtures/tests.json
rename : src/authority/forms.py => authority/forms.py
rename : src/authority/managers.py => authority/managers.py
rename : src/authority/models.py => authority/models.py
rename : src/authority/permissions.py => authority/permissions.py
rename : src/authority/sites.py => authority/sites.py
rename : src/authority/templates/admin/edit_inline/action_tabular.html => authority/templates/admin/edit_inline/action_tabular.html
rename : src/authority/templates/admin/permission_change_form.html => authority/templates/admin/permission_change_form.html
rename : src/authority/templates/authority/403.html => authority/templates/authority/403.html
rename : src/authority/templates/authority/permission_delete_link.html => authority/templates/authority/permission_delete_link.html
rename : src/authority/templates/authority/permission_form.html => authority/templates/authority/permission_form.html
rename : src/authority/templates/authority/permission_request_approve_link.html => authority/templates/authority/permission_request_approve_link.html
rename : src/authority/templates/authority/permission_request_delete_link.html => authority/templates/authority/permission_request_delete_link.html
rename : src/authority/templatetags/__init__.py => authority/templatetags/__init__.py
rename : src/authority/templatetags/permissions.py => authority/templatetags/permissions.py
rename : src/authority/tests.py => authority/tests.py
rename : src/authority/urls.py => authority/urls.py
rename : src/authority/views.py => authority/views.py
rename : src/authority/widgets.py => authority/widgets.py
2010-01-07 18:00:41 +01:00

96 lines
3.8 KiB
Python

from django import forms
from django.utils.translation import ugettext_lazy as _
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User, Group
from django.utils.safestring import mark_safe
from authority import permissions, get_choices_for
from authority.models import Permission
class BasePermissionForm(forms.ModelForm):
codename = forms.CharField(label=_('Permission'))
class Meta:
model = Permission
def __init__(self, perm=None, obj=None, approved=False, *args, **kwargs):
self.perm = perm
self.obj = obj
self.approved = approved
if obj and perm:
self.base_fields['codename'].widget = forms.HiddenInput()
elif obj and (not perm or not approved):
perms = get_choices_for(self.obj)
self.base_fields['codename'].widget = forms.Select(choices=perms)
super(BasePermissionForm, self).__init__(*args, **kwargs)
def save(self, request, commit=True, *args, **kwargs):
self.instance.creator = request.user
self.instance.content_type = ContentType.objects.get_for_model(self.obj)
self.instance.object_id = self.obj.id
self.instance.codename = self.perm
self.instance.approved = self.approved
return super(BasePermissionForm, self).save(commit)
class UserPermissionForm(BasePermissionForm):
user = forms.CharField(label=_('User'))
class Meta(BasePermissionForm.Meta):
fields = ('user',)
def __init__(self, *args, **kwargs):
if not kwargs.get('approved', False):
self.base_fields['user'].widget = forms.HiddenInput()
super(UserPermissionForm, self).__init__(*args, **kwargs)
def clean_user(self):
username = self.cleaned_data["user"]
try:
user = User.objects.get(username__iexact=username)
except User.DoesNotExist:
raise forms.ValidationError(
mark_safe(_("A user with that username does not exist.")))
check = permissions.BasePermission(user=user)
error_msg = None
if user.is_superuser:
error_msg = _("The user %(user)s do not need to request "
"access to any permission as it is a super user.")
elif check.has_perm(self.perm, self.obj):
error_msg = _("The user %(user)s already has the permission "
"'%(perm)s' for %(object_name)s '%(obj)s'")
elif check.requested_perm(self.perm, self.obj):
error_msg = _("The user %(user)s already requested the permission"
" '%(perm)s' for %(object_name)s '%(obj)s'")
if error_msg:
error_msg = error_msg % {
'object_name': self.obj._meta.object_name.lower(),
'perm': self.perm,
'obj': self.obj,
'user': user,
}
raise forms.ValidationError(mark_safe(error_msg))
return user
class GroupPermissionForm(BasePermissionForm):
group = forms.CharField(label=_('Group'))
class Meta(BasePermissionForm.Meta):
fields = ('group',)
def clean_group(self):
groupname = self.cleaned_data["group"]
try:
group = Group.objects.get(name__iexact=groupname)
except Group.DoesNotExist:
raise forms.ValidationError(
mark_safe(_("A group with that name does not exist.")))
check = permissions.BasePermission(group=group)
if check.has_perm(self.perm, self.obj):
raise forms.ValidationError(mark_safe(
_("This group already has the permission '%(perm)s' for %(object_name)s '%(obj)s'") % {
'perm': self.perm,
'object_name': self.obj._meta.object_name.lower(),
'obj': self.obj,
}))
return group