Changeset 3623
- Timestamp:
- 08/20/06 13:02:58 (2 years ago)
- Files:
-
- django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py (modified) (5 diffs)
- django/branches/per-object-permissions/django/contrib/admin/templates/admin/change_form.html (modified) (1 diff)
- django/branches/per-object-permissions/django/contrib/admin/templates/admin/row_level_permission.html (modified) (3 diffs)
- django/branches/per-object-permissions/django/contrib/admin/templatetags/adminapplist.py (modified) (1 diff)
- django/branches/per-object-permissions/django/contrib/admin/views/main.py (modified) (2 diffs)
- django/branches/per-object-permissions/django/contrib/admin/views/row_level_permissions.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py
r3615 r3623 12 12 perm_list = [(o.id, o.name) for o in self.ct.permission_set.order_by("name")] 13 13 14 obj_list = [( 'user', User.objects.order_by("username"))]15 obj_list.extend([( 'group', Group.objects.order_by("name"))])14 obj_list = [(User, User.objects.order_by("username"))] 15 obj_list.extend([(Group, Group.objects.order_by("name"))]) 16 16 17 17 self.fields = ( … … 53 53 self.ct = ct 54 54 self.obj_instance = obj_instance 55 obj_list = [( 'user', User.objects.order_by("username"))]56 obj_list.extend([( 'group', Group.objects.order_by("name"))])55 obj_list = [(User, User.objects.order_by("username"))] 56 obj_list.extend([(Group, Group.objects.order_by("name"))]) 57 57 perm_list = [(o.id, o.name) for o in self.ct.permission_set.order_by("name")] 58 58 self.fields = ( … … 74 74 perm = Permission.objects.get(pk=i) 75 75 76 #Check that the new row level perms are unique 76 77 field_name_list = ('owner_ct', 'owner_id', 'model_ct', 'model_id', 'permission') 77 78 field_data = ct.id … … 82 83 rlp_list.append(rlp) 83 84 84 return rlp_list 85 86 #def validate_unique_together(orig_obj, field_name_list, all_data): 87 #field_list = [opts.get_field(field_name) for field_name in field_name_list] 88 #kwargs = {} 89 #for f in field_list: 90 #field_val = all_data.get(f.attname, None) 91 #if field_val is None: 92 #return 93 #if isinstance(f.rel, ManyToOneRel): 94 #kwargs['%s__pk' % f.name] = field_val 95 #else: 96 #kwargs['%s__iexact' % f.name] = field_val 97 #try: 98 #old_obj = self.manager.get(**kwargs) 99 #except ObjectDoesNotExist: 100 #return 101 #if hasattr(self, 'original_object') and self.original_object._get_pk_val() == old_obj._get_pk_val(): 102 #pass 103 #else: 104 #raise validators.ValidationError, _("%(object)s with this %(type)s already exists for the given %(field)s.") % \ 105 #{'object': capfirst(opts.verbose_name), 'type': field_list[0].verbose_name, 'field': get_text_list(field_name_list[1:], 'and')} 106 85 return rlp_list 107 86 108 87 class MultipleObjSelectField(forms.SelectField): 88 """ 89 Extends a select field to use more then one type of model in a select field. 90 Uses optgroup in the select field to differentiate between object types. 91 92 obj_list should be a list of lists containing the model and a list of objects. 93 E.g. ((User, User.objects.all()), (Group, Group.objects.all)) 94 95 If you wish to define a default text to be shown as the default option, use the 96 default_text parameter. An example of default text would be "Select an option" 97 98 The remaining parameters are very similiar to the normal SelectField. 99 100 To return the object selected pass the string result to MultipleObjSelectField.returnObject(string), 101 it returns the object instance. 102 103 To create a key for a specific object, use: MultipleObjSelectField.returnKey(object). It has an optional 104 parameter for the content type (ct), if you have already determined the content type and want to save on 105 db queries. 106 """ 109 107 def __init__(self, field_name, obj_list=None, 110 108 default_text=None, size=1, is_required=False, validator_list=None, … … 112 110 choice_list = [] 113 111 self.default_text = default_text 112 #Loop through the object list and create the list to be displayed 114 113 for obj, obj_choices in obj_list: 115 ct = ContentType.objects.get (model__exact=obj)114 ct = ContentType.objects.get_for_model(obj) 116 115 object_choice = [(MultipleObjSelectField.returnKey(o, ct=ct), str(o)) for o in obj_choices] 117 116 choice_list.extend([(ct.name.title(), object_choice)]) 118 #choice_list.extend([(MultipleObjSelectField.returnKey(o, ct=ct), str(o)+" ("+ct.name.title()+")") for o in obj_choices])119 117 super(MultipleObjSelectField, self).__init__(field_name, choices=choice_list, 120 118 size=size, is_required=is_required, django/branches/per-object-permissions/django/contrib/admin/templates/admin/change_form.html
r3616 r3623 19 19 {% if change %}{% if not is_popup %} 20 20 <ul class="object-tools"><li><a href="history/" class="historylink">{% trans "History" %}</a></li> 21 {% if has_row_level_permissions %}<li><a href="row_level_permissions/" class="rowlevelpermissions">{% trans "Edit Row Level Permissions" %}</a></li>{% endif %}21 {% if has_row_level_permissions and has_row_level_permissions %}<li><a href="row_level_permissions/" class="rowlevelpermissions">{% trans "Edit Row Level Permissions" %}</a></li>{% endif %} 22 22 {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%} 23 23 </ul> django/branches/per-object-permissions/django/contrib/admin/templates/admin/row_level_permission.html
r3618 r3623 93 93 {% for o in x.1 %} 94 94 <tr id="editRLP-{{ o.rlp.id }}"> 95 <!--<td colspan="5">-->96 95 <form id="editRLPForm-{{ o.rlp.id }}" class="editRLPForm" method="POST" name="editRLPForm-{{ o.rlp.id }}" action="change/{% objref o.rlp %}/"> 97 <!--<table>98 <tr>-->99 96 <td> 100 97 <input type="checkbox" name="apply_checkbox"> … … 113 110 <input id="cancelButton-{{ o.rlp.id }}" type="reset" value="{% trans 'Reset' %}"/> 114 111 <br/> 115 <!--<a href="../../../auth/row_level_permission/{% objref o.rlp %}/delete/" class="deleteLink" onclick="row_level_permission.deleteRLP('{% objref o.rlp %}'); return false;">{% trans 'Delete' %}</a> |-->116 <!--<a href="../../../auth/row_level_permission/{% objref o.rlp %}/delete/" class="deletelink">{% trans 'Delete' %}</a> | -->117 112 <a href="delete/{% objref o.rlp %}" class="deletelink">{% trans 'Delete' %}</a> | 118 113 <a href="javascript:row_level_permission.copyToNew({{ o.rlp.id }})" class="copyToNewLink">{% trans 'Copy to New' %}</a> 119 114 </td> 120 <!--</tr>121 </table>-->122 115 </form> 123 116 </td> … … 134 127 <tr align="right"> 135 128 <td colspan="5"> 136 {% comment %}137 {% if has_previous %} <a href="?page={{ previous }}"> << </a> {% endif %} {% if has_next %} <a href="?page={{ next }}"> >> </a>{% endif %}138 {% endcomment %}139 129 <div class="paginator">{% paginator %}</div> 140 130 </td> django/branches/per-object-permissions/django/contrib/admin/templatetags/adminapplist.py
r2999 r3623 27 27 for m in app_models: 28 28 if m._meta.admin: 29 perms = { 30 'add': user.has_perm("%s.%s" % (app_label, m._meta.get_add_permission())), 31 'change': user.has_perm("%s.%s" % (app_label, m._meta.get_change_permission())), 32 'delete': user.has_perm("%s.%s" % (app_label, m._meta.get_delete_permission())), 33 } 34 35 # Check whether user has any perm for this module. 36 # If so, add the module to the model_list. 37 if True in perms.values(): 38 model_list.append({ 39 'name': capfirst(m._meta.verbose_name_plural), 40 'admin_url': '%s/%s/' % (app_label, m.__name__.lower()), 41 'perms': perms, 42 }) 29 if not m._meta.admin.hidden: 30 perms = { 31 'add': user.has_perm("%s.%s" % (app_label, m._meta.get_add_permission())), 32 'change': user.has_perm("%s.%s" % (app_label, m._meta.get_change_permission())), 33 'delete': user.has_perm("%s.%s" % (app_label, m._meta.get_delete_permission())), 34 } 35 36 # Check whether user has any perm for this module. 37 # If so, add the module to the model_list. 38 if True in perms.values(): 39 model_list.append({ 40 'name': capfirst(m._meta.verbose_name_plural), 41 'admin_url': '%s/%s/' % (app_label, m.__name__.lower()), 42 'perms': perms, 43 }) 43 44 44 45 if model_list: django/branches/per-object-permissions/django/contrib/admin/views/main.py
r3616 r3623 204 204 'has_file_field': opts.has_field_type(models.FileField), 205 205 'has_absolute_url': hasattr(model, 'get_absolute_url'), 206 'has_row_level_permissions':opts.row_level_permissions,207 206 'auto_populated_fields': auto_populated_fields, 208 207 'bound_field_sets': bound_field_sets, … … 401 400 'original': manipulator.original_object, 402 401 'is_popup': request.REQUEST.has_key('_popup'), 402 'object_has_row_level_permissions':opts.row_level_permissions, 403 'has_row_level_permissions':request.user.has_perm("auth.change_rowlevelpermission") and request.user.has_perm(opts.app_label+"."+opts.get_change_permission(), object=manipulator.original_object), 403 404 }) 404 405 if model._meta.row_level_permissions:406 from django.contrib.admin.row_level_perm_manipulator import AddRLPManipulator, ChangeRLPManipulator407 model_instance = manipulator.original_object408 model_ct = ContentType.objects.get_for_model(model)409 rlp_list = model_instance.row_level_permissions.order_by('owner_ct', 'owner_id')410 rlp_errors = rlp_new_data = {}411 add_rlp_manip = AddRLPManipulator(model_instance, model_ct)412 edit_rlp_manip = ChangeRLPManipulator(model_ct)413 new_rlp_form = forms.FormWrapper(add_rlp_manip, rlp_new_data, rlp_errors)414 empty_rlp_form = forms.FormWrapper(edit_rlp_manip, rlp_new_data, rlp_errors)415 rlp_form_list = []416 for r in rlp_list:417 owner_val = str(r.owner_ct)+"-"+str(r.owner_id)418 data = {'id':r.id, 'owner':owner_val, 'perm':r.permission.id, 'negative':r.negative}419 rlp_form_list.append({'form':forms.FormWrapper(edit_rlp_manip, data, rlp_errors), 'rlp':r})420 rlp_context = {'new_rlp_form':new_rlp_form, 'rlp_form_list':rlp_form_list, 'empty_rlp_form':empty_rlp_form}421 c.update(rlp_context)422 405 423 406 return render_change_form(model, manipulator, c, change=True) django/branches/per-object-permissions/django/contrib/admin/views/row_level_permissions.py
r3619 r3623 15 15 16 16 def view_row_level_permissions(request, app_label, model_name, object_id): 17 """ 18 Displays a list of row level permisisons for the model instance 19 """ 17 20 model = models.get_model(app_label, model_name) 18 21 object_id = unquote(object_id) … … 38 41 }) 39 42 40 41 list_per_page = opts.admin.list_per_page 42 #list_per_page = 20 43 list_per_page = RowLevelPermission._meta.admin.list_per_page 43 44 paginator = ObjectPaginator(model_instance.row_level_permissions.order_by('owner_ct', 'owner_id'), 44 45 list_per_page) … … 103 104 104 105 def delete_row_level_permission(request, app_label, model_name, object_id, ct_id, rlp_id, hash): 106 """ 107 Deletes the given row level permission. 108 """ 105 109 msg = {} 106 110 … … 130 134 request.user.message_set.create(message=msg['text']) 131 135 136 request.user.message_set.create(message=msg['text']) 132 137 return HttpResponseRedirect(request.META["HTTP_REFERER"]) 133 # return HttpResponseRedirect("%s?rlp_result=%s&rlp_msg=%s" % (request.META["HTTP_REFERER"], str(msg["result"]), main.quote(msg["text"]))) 134 #return main.change_stage(request, main.quote(obj._meta.app_label), main.quote(obj._meta.object_name), 135 # main.quote(str(obj.id)), extra_context={"row_level_perm_msg":msg,}) 138 136 139 delete_row_level_permission = staff_member_required(never_cache(delete_row_level_permission)) 137 140 … … 180 183 msg["results"]=resp_list 181 184 182 #return main.change_stage(request, main.quote(obj._meta.app_label), main.quote(obj._meta.object_name), 183 # main.quote(str(obj.id)), extra_context={"row_level_perm_msg":msg,}) 184 if msg["result"]: 185 request.user.message_set.create(message=msg['text']) 186 return HttpResponseRedirect(request.META["HTTP_REFERER"]) 187 else: 188 return HttpResponseRedirect("../?err_msg=%s" % msg['text']) 185 request.user.message_set.create(message=msg['text']) 186 return HttpResponseRedirect(request.META["HTTP_REFERER"]) 187 189 188 add_row_level_permission = staff_member_required(never_cache(add_row_level_permission)) 190 189 … … 233 232 234 233 request.user.message_set.create(message=msg['text']) 234 235 request.user.message_set.create(message=msg['text']) 235 236 return HttpResponseRedirect(request.META["HTTP_REFERER"]) 236 # request.POST = {}237 # return change_stage(request, main.quote(obj._meta.app_label), main.quote(obj._meta.object_name),238 # main.quote(str(obj.id)), extra_context={"row_level_perm_msg":msg,})239 237 240 238 change_row_level_permission = staff_member_required(never_cache(change_row_level_permission))
