/usr/lib/python2.7/dist-packages/guardian/forms.py is in python-django-guardian 1.2.4+git20141127-0.2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | from __future__ import unicode_literals
from django import forms
from django.utils.translation import ugettext as _
from guardian.shortcuts import assign_perm
from guardian.shortcuts import remove_perm
from guardian.shortcuts import get_perms
from guardian.shortcuts import get_perms_for_model
class BaseObjectPermissionsForm(forms.Form):
"""
Base form for object permissions management. Needs to be extended for usage
with users and/or groups.
"""
def __init__(self, obj, *args, **kwargs):
"""
:param obj: Any instance which form would use to manage object
permissions"
"""
self.obj = obj
super(BaseObjectPermissionsForm, self).__init__(*args, **kwargs)
field_name = self.get_obj_perms_field_name()
self.fields[field_name] = self.get_obj_perms_field()
def get_obj_perms_field(self):
"""
Returns field instance for object permissions management. May be
replaced entirely.
"""
field_class = self.get_obj_perms_field_class()
field = field_class(
label=self.get_obj_perms_field_label(),
choices=self.get_obj_perms_field_choices(),
initial=self.get_obj_perms_field_initial(),
widget=self.get_obj_perms_field_widget(),
required=self.are_obj_perms_required(),
)
return field
def get_obj_perms_field_name(self):
"""
Returns name of the object permissions management field. Default:
``permission``.
"""
return 'permissions'
def get_obj_perms_field_label(self):
"""
Returns label of the object permissions management field. Defualt:
``_("Permissions")`` (marked to be translated).
"""
return _("Permissions")
def get_obj_perms_field_choices(self):
"""
Returns choices for object permissions management field. Default:
list of tuples ``(codename, name)`` for each ``Permission`` instance
for the managed object.
"""
choices = [(p.codename, p.name) for p in get_perms_for_model(self.obj)]
return choices
def get_obj_perms_field_initial(self):
"""
Returns initial object permissions management field choices. Default:
``[]`` (empty list).
"""
return []
def get_obj_perms_field_class(self):
"""
Returns object permissions management field's base class. Default:
``django.forms.MultipleChoiceField``.
"""
return forms.MultipleChoiceField
def get_obj_perms_field_widget(self):
"""
Returns object permissions management field's widget base class.
Default: ``django.forms.SelectMultiple``.
"""
return forms.SelectMultiple
def are_obj_perms_required(self):
"""
Indicates if at least one object permission should be required. Default:
``False``.
"""
return False
def save_obj_perms(self):
"""
Must be implemented in concrete form class. This method should store
selected object permissions.
"""
raise NotImplementedError
class UserObjectPermissionsForm(BaseObjectPermissionsForm):
"""
Object level permissions management form for usage with ``User`` instances.
Example usage::
from django.shortcuts import get_object_or_404
from myapp.models import Post
from guardian.forms import UserObjectPermissionsForm
from django.contrib.auth.models import User
def my_view(request, post_slug, user_id):
user = get_object_or_404(User, id=user_id)
post = get_object_or_404(Post, slug=post_slug)
form = UserObjectPermissionsForm(user, post, request.POST or None)
if request.method == 'POST' and form.is_valid():
form.save_obj_perms()
...
"""
def __init__(self, user, *args, **kwargs):
self.user = user
super(UserObjectPermissionsForm, self).__init__(*args, **kwargs)
def get_obj_perms_field_initial(self):
perms = get_perms(self.user, self.obj)
return perms
def save_obj_perms(self):
"""
Saves selected object permissions by creating new ones and removing
those which were not selected but already exists.
Should be called *after* form is validated.
"""
perms = self.cleaned_data[self.get_obj_perms_field_name()]
model_perms = [c[0] for c in self.get_obj_perms_field_choices()]
to_remove = set(model_perms) - set(perms)
for perm in to_remove:
remove_perm(perm, self.user, self.obj)
for perm in perms:
assign_perm(perm, self.user, self.obj)
class GroupObjectPermissionsForm(BaseObjectPermissionsForm):
"""
Object level permissions management form for usage with ``Group`` instances.
Example usage::
from django.shortcuts import get_object_or_404
from myapp.models import Post
from guardian.forms import GroupObjectPermissionsForm
from guardian.models import Group
def my_view(request, post_slug, group_id):
group = get_object_or_404(Group, id=group_id)
post = get_object_or_404(Post, slug=post_slug)
form = GroupObjectPermissionsForm(group, post, request.POST or None)
if request.method == 'POST' and form.is_valid():
form.save_obj_perms()
...
"""
def __init__(self, group, *args, **kwargs):
self.group = group
super(GroupObjectPermissionsForm, self).__init__(*args, **kwargs)
def get_obj_perms_field_initial(self):
perms = get_perms(self.group, self.obj)
return perms
def save_obj_perms(self):
"""
Saves selected object permissions by creating new ones and removing
those which were not selected but already exists.
Should be called *after* form is validated.
"""
perms = self.cleaned_data[self.get_obj_perms_field_name()]
model_perms = [c[0] for c in self.get_obj_perms_field_choices()]
to_remove = set(model_perms) - set(perms)
for perm in to_remove:
remove_perm(perm, self.group, self.obj)
for perm in perms:
assign_perm(perm, self.group, self.obj)
|