Changeset 3615
- Timestamp:
- 08/19/06 11:27:56 (2 years ago)
- Files:
-
- django/branches/per-object-permissions/django/contrib/admin/media/css/global.css (modified) (1 diff)
- django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py (modified) (1 diff)
- django/branches/per-object-permissions/django/contrib/admin/templates/admin/change_form.html (modified) (2 diffs)
- django/branches/per-object-permissions/django/contrib/admin/templates/admin/row_level_permission.html (modified) (5 diffs)
- django/branches/per-object-permissions/django/contrib/admin/urls.py (modified) (2 diffs)
- django/branches/per-object-permissions/django/contrib/admin/views/row_level_permissions.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/per-object-permissions/django/contrib/admin/media/css/global.css
r3464 r3615 91 91 input[type=submit].default, .submit-row input.default { border:2px solid #5b80b2; background:#7CA0C7 url(../img/admin/default-bg.gif) bottom repeat-x; font-weight:bold; color:white; } 92 92 input[type=submit].default:active { background-image:url(../img/admin/default-bg-reverse.gif); background-position:top; } 93 /* RESET BUTTONS */ 94 input[type=reset], input[type=button], .submit-row input { background:white url(../img/admin/nav-bg.gif) bottom repeat-x; padding:3px; color:black; border:1px solid #bbb; border-color:#ddd #aaa #aaa #ddd; } 95 input[type=reseet]:active, input[type=button]:active { background-image:url(../img/admin/nav-bg-reverse.gif); background-position:top; } 96 input[type=reset].default, .submit-row input.default { border:2px solid #5b80b2; background:#7CA0C7 url(../img/admin/default-bg.gif) bottom repeat-x; font-weight:bold; color:white; } 97 input[type=reset].default:active { background-image:url(../img/admin/default-bg-reverse.gif); background-position:top; } 93 98 94 99 /* MODULES */ django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py
r3610 r3615 117 117 choice_list.extend([(ct.name.title(), object_choice)]) 118 118 #choice_list.extend([(MultipleObjSelectField.returnKey(o, ct=ct), str(o)+" ("+ct.name.title()+")") for o in obj_choices]) 119 print choice_list120 119 super(MultipleObjSelectField, self).__init__(field_name, choices=choice_list, 121 120 size=size, is_required=is_required, django/branches/per-object-permissions/django/contrib/admin/templates/admin/change_form.html
r3583 r3615 67 67 </form> 68 68 69 {% comment %} 69 70 {% if new_rlp_form %} 70 71 <div id="row_level_perm_container"> … … 72 73 </div> 73 74 {% endif %} 75 {% endcomment %} 74 76 75 77 </div> django/branches/per-object-permissions/django/contrib/admin/templates/admin/row_level_permission.html
r3586 r3615 1 {% load i18n admin_modify %} 1 {% extends "admin/base_site.html" %} 2 {% load i18n admin_modify adminmedia auth %} 3 {% block extrahead %}{{ block.super }} 4 <script type="text/javascript" src="../../../jsi18n/"></script> 5 {% include_admin_script "js/row_level_permission.js" %} 6 {% for js in javascript_imports %}{% include_admin_script js %}{% endfor %} 7 {% endblock %} 8 {% block stylesheet %}{% admin_media_prefix %}css/forms.css{% endblock %} 9 {% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %} 10 {% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %} 11 {% block userlinks %}<a href="../../../../doc/">{% trans 'Documentation' %}</a> / <a href="../../../../password_change/">{% trans 'Change password' %}</a> / <a href="../../../../logout/">{% trans 'Log out' %}</a>{% endblock %} 12 {% block breadcrumbs %} 13 <div class="breadcrumbs"> 14 <a href="../../../../">{% trans "Home" %}</a> › 15 <a href="../../">{{ opts.verbose_name_plural|capfirst|escape }}</a> › 16 <a href="../">{{ original|truncatewords:"18"|escape }}</a> › 17 {{ title|escape }} 18 </div> 19 {% endblock %} 20 {% block content %}<div id="content-main"> 21 <div id="changelist"> 2 22 3 {% include_admin_script "js/row_level_permission.js" %} 4 5 6 <h1>{% trans "Row Level Permissions" %}</h1> 7 <div id="rlpResults"> 8 </div> 23 {% if_has_perm "auth.add_rowlevelpermission" %} 9 24 <h2>{% trans "Add Permissions" %}</h2> 10 <form id="addRLPForm" method="POST" name="addRLPForm" action=" ../../../auth/row_level_permission/add/{{ content_type_id }}/{{ object_id }}/">25 <form id="addRLPForm" method="POST" name="addRLPForm" action="add/"> 11 26 <table id="add-rlpTable"> 12 27 <tr class="header"> … … 47 62 </table> 48 63 </form> 64 {% end_if_has_perm %} 49 65 66 {% if_has_perm "auth.change_rowlevelpermission" %} 50 67 <h2>{% trans "Current Permissions" %}</h2> 51 68 <table id="current-rlpTable"> … … 91 108 <br/> 92 109 <!--<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> |--> 93 <a href="../../../auth/row_level_permission/{% objref o.rlp %}/delete/" class="delete Link">{% trans 'Delete' %}</a> |110 <a href="../../../auth/row_level_permission/{% objref o.rlp %}/delete/" class="deletelink">{% trans 'Delete' %}</a> | 94 111 <a href="javascript:row_level_permission.copyToNew({{ o.rlp.id }})" class="copyToNewLink">{% trans 'Copy to New' %}</a> 95 112 </td> … … 105 122 <input id="apply_selected_button" type="submit" value="{% trans 'Apply Selected' %}" /> 106 123 </form> 124 <form id="delete_selected_form" method="POST" name="delete_selected_form" onsubmit="alert('Not yet working'); return false;"> 125 <input id="delete_selected_button" type="submit" value="{% trans 'Delete Selected' %}" /> 126 </form> 107 127 </td> 108 128 </tr> 129 {% if is_paginated %} 130 <tr align="right"> 131 <td colspan="5"> 132 {% if has_previous %} <a href="?page={{ previous }}"> << </a> {% endif %} {% if has_next %} <a href="?page={{ next }}"> >> </a>{% endif %} 133 </td> 134 </tr> 135 {% endif %} 109 136 </TBODY> 110 137 </table> … … 112 139 <em>{% trans 'No row level permissions'%}</em> 113 140 {% endif %} 141 {% end_if_has_perm %} 142 </div> 143 </div> 144 {% endblock %} django/branches/per-object-permissions/django/contrib/admin/urls.py
r3584 r3615 31 31 ('^auth/row_level_permission/(?P<ct_id>\d+)/(?P<rlp_id>\d+)/(?P<hash>\w+)/delete/$', 'django.contrib.admin.views.row_level_permissions.delete_row_level_permission'), 32 32 ('^auth/row_level_permission/(?P<ct_id>\d+)/(?P<rlp_id>\d+)/(?P<hash>\w+)/change/$', 'django.contrib.admin.views.row_level_permissions.change_row_level_permission'), 33 ('^auth/row_level_permission/add/(?P<ct_id>\d+)/(?P<obj_id>\d+)/$', 'django.contrib.admin.views.row_level_permissions.add_row_level_permission'), 33 ('^auth/row_level_permission/add/(?P<ct_id>\d+)/(?P<object_id>\d+)/$', 'django.contrib.admin.views.row_level_permissions.add_row_level_permission'), 34 ('^auth/row_level_permission/view/(?P<ct_id>\d+)/(?P<object_id>\d+)/$', 'django.contrib.admin.views.row_level_permissions.edit_row_level_permissions'), 34 35 35 36 # "Add user" -- a special-case view … … 41 42 ('^([^/]+)/([^/]+)/(.+)/history/$', 'django.contrib.admin.views.main.history'), 42 43 ('^([^/]+)/([^/]+)/(.+)/delete/$', 'django.contrib.admin.views.main.delete_stage'), 44 ('^([^/]+)/([^/]+)/(.+)/row_level_permissions/$', 'django.contrib.admin.views.row_level_permissions.edit_row_level_permissions'), 45 ('^([^/]+)/([^/]+)/(.+)/row_level_permissions/add/$', 'django.contrib.admin.views.row_level_permissions.add_row_level_permission'), 43 46 ('^([^/]+)/([^/]+)/(.+)/$', 'django.contrib.admin.views.main.change_stage'), 44 47 ) django/branches/per-object-permissions/django/contrib/admin/views/row_level_permissions.py
r3540 r3615 1 1 from django.contrib.admin import utils 2 from django import forms, template 2 3 from django.shortcuts import render_to_response, get_object_or_404 3 4 from django.http import Http404, HttpResponse, HttpResponseRedirect 4 5 from django.contrib.contenttypes.models import ContentType 5 6 from django.contrib.auth.models import RowLevelPermission 7 from django.contrib.admin.views import main 8 from django.db import models 6 9 from django.contrib.admin.row_level_perm_manipulator import AddRLPManipulator, ChangeRLPManipulator 7 10 from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist, PermissionDenied 11 from django.core.paginator import ObjectPaginator, InvalidPage 8 12 import simplejson 13 14 def edit_row_level_permissions(request, app_label, model_name, object_id): 15 model = models.get_model(app_label, model_name) 16 object_id = main.unquote(object_id) 17 18 model_ct = ContentType.objects.get_for_model(model) 19 model_instance = get_object_or_404(model, pk=object_id) 20 opts = model_instance._meta 21 22 if not opts.row_level_permissions: 23 raise Http404 24 25 if not request.user.has_perm(opts.app_label + '.' + opts.get_change_permission(), object=model_instance): 26 raise PermissionDenied 27 if not request.user.has_perm(RowLevelPermission._meta.app_label + '.' + RowLevelPermission._meta.get_change_permission()): 28 raise PermissionDenied 29 30 #TODO: For now takes the number per page from the model instance not the RLP object 31 paginator = ObjectPaginator(model_instance.row_level_permissions.order_by('owner_ct', 'owner_id'), 32 opts.admin.list_per_page) 33 34 page = int(request.GET.get('page', 0)) 35 rlp_list = paginator.get_page(page) 36 37 c = template.RequestContext(request, { 38 'title': _('Edit Row Level Permissions'), 39 'object_id': object_id, 40 'content_type_id':model_ct.id, 41 'original': model_instance, 42 'opts':opts, 43 "is_paginated": paginator.has_next_page(0), 44 "has_next": paginator.has_next_page(page), 45 "has_previous": paginator.has_previous_page(page), 46 "page": page + 1, 47 "next": page + 1, 48 "previous": page - 1, 49 }) 50 51 rlp_errors = rlp_new_data = {} 52 add_rlp_manip = AddRLPManipulator(model_instance, model_ct) 53 edit_rlp_manip = ChangeRLPManipulator(model_ct) 54 new_rlp_form = forms.FormWrapper(add_rlp_manip, rlp_new_data, rlp_errors) 55 empty_rlp_form = forms.FormWrapper(edit_rlp_manip, rlp_new_data, rlp_errors) 56 rlp_form_list = [] 57 for r in rlp_list: 58 owner_val = str(r.owner_ct)+"-"+str(r.owner_id) 59 data = {'id':r.id, 'owner':owner_val, 'perm':r.permission.id, 'negative':r.negative} 60 rlp_form_list.append({'form':forms.FormWrapper(edit_rlp_manip, data, rlp_errors), 'rlp':r}) 61 rlp_context = {'new_rlp_form':new_rlp_form, 62 'rlp_form_list':rlp_form_list, 63 'empty_rlp_form':empty_rlp_form,} 64 65 c.update(rlp_context) 66 67 return render_to_response([ 68 "admin/%s/%s/row_level_permission.html" % (opts.app_label, opts.object_name.lower()), 69 "admin/%s/row_level_permission.html" % opts.app_label, 70 "admin/row_level_permission.html"], context_instance=c) 9 71 10 72 def delete_row_level_permission(request, ct_id, rlp_id, hash): 11 73 msg = {} 12 ajax = request.GET.has_key("ajax")13 74 if utils.verify_objref_hash(ct_id, rlp_id, hash): 14 75 rlp = get_object_or_404(RowLevelPermission, pk=rlp_id) 15 76 ct = rlp.model_ct 16 77 obj = rlp.model 17 opts = rlp._meta 18 if not request.user.has_perm( opts.app_label + '.' + opts.get_delete_permission()):78 79 if not request.user.has_perm(rlp._meta.app_label + '.' + rlp._meta.get_delete_permission()): 19 80 raise PermissionDenied 20 if not request.user.has_perm(obj._meta.app_label + '.' + obj._meta.get_change_permission() ):81 if not request.user.has_perm(obj._meta.app_label + '.' + obj._meta.get_change_permission(), object=obj): 21 82 raise PermissionDenied 83 22 84 rlp.delete() 23 85 msg = {"result":True, "text":_("Row level permission was successful deleted"), "id":rlp_id} 24 86 else: 25 87 msg = { 'result':False, 'text': _("row level permission not found (bad hash)" )} 26 if ajax:27 return HttpResponse(simplejson.dumps(msg), 'text/javascript')28 request.user.message_set.create(message=msg['text'])29 #return HttpResponseRedirect("/edit/%s/%s" % (ct.model, obj.id))30 return HttpResponseRedirect("../../../../../../%s/%s/%s" % (obj._meta.app_label, obj._meta.module_name , str(obj.id)))31 88 32 def add_row_level_permission(request, ct_id, obj_id): 89 request.user.message_set.create(message=result['text']) 90 91 return HttpResponseRedirect("../") 92 # return HttpResponseRedirect("%s?rlp_result=%s&rlp_msg=%s" % (request.META["HTTP_REFERER"], str(msg["result"]), main.quote(msg["text"]))) 93 #return main.change_stage(request, main.quote(obj._meta.app_label), main.quote(obj._meta.object_name), 94 # main.quote(str(obj.id)), extra_context={"row_level_perm_msg":msg,}) 95 96 97 def add_row_level_permission(request, app_label, model_name, object_id): 33 98 msg = {} 34 ajax = request.GET.has_key("ajax")35 99 if not request.POST: 36 100 msg = { 'result':False, 'text': _("Only POSTs are allowed" )} 37 if ajax: 38 return HttpResponse(simplejson.dumps(msg), 'text/javascript') 101 39 102 request.user.message_set.create(message=msg['text']) 40 return HttpResponseRedirect("/edit/%s/%s" % (obj_type, obj _id))103 return HttpResponseRedirect("/edit/%s/%s" % (obj_type, object_id)) 41 104 42 ct = get_object_or_404(ContentType, pk=ct_id) 43 obj = get_object_or_404(ct.model_class(), pk=obj_id) 44 if not request.user.has_perm(obj._meta.app_label + '.' + obj._meta.get_change_permission()): 105 model = models.get_model(app_label, model_name) 106 object_id = main.unquote(object_id) 107 108 ct = ContentType.objects.get_for_model(model) 109 obj = get_object_or_404(model, pk=object_id) 110 111 if not request.user.has_perm(obj._meta.app_label + '.' + obj._meta.get_change_permission(), object=obj): 45 112 raise PermissionDenied 46 113 … … 65 132 else: 66 133 msg = {"result":True, "text":_("Row level permissions have successfully been added.")} 67 if not ajax:68 request.user.message_set.create(message=msg['text'])69 return HttpResponseRedirect("../../../../../%s/%s/%s" % (obj._meta.app_label, obj._meta.module_name , str(obj.id)))70 71 134 72 135 resp_list = [] … … 75 138 resp_list.append({"id":rlp.id, "permission":rlp.permission.id, "hash":hash}) 76 139 msg["results"]=resp_list 77 return HttpResponse(simplejson.dumps(msg), 'text/javascript') 140 141 #return main.change_stage(request, main.quote(obj._meta.app_label), main.quote(obj._meta.object_name), 142 # main.quote(str(obj.id)), extra_context={"row_level_perm_msg":msg,}) 143 return HttpResponseRedirect("../") 78 144 79 145 def change_row_level_permission(request, ct_id, rlp_id, hash): … … 97 163 raise PermissionDenied 98 164 99 obj ect_model = rlp.model_ct.model_class()100 if not request.user.has_perm( object_model._meta.app_label + '.' + object_model._meta.get_change_permission()):165 obj = rlp.model 166 if not request.user.has_perm(rlp._meta.app_label + '.' + rlp._meta.get_change_permission(), object=obj): 101 167 raise PermissionDenied 102 168 … … 115 181 if ajax: 116 182 return HttpResponse(simplejson.dumps(msg), 'text/javascript') 117 request.user.message_set.create(message=msg['text']) 118 return HttpResponseRedirect("../../../../../../%s/%s/%s" % (object_model._meta.app_label, object_model._meta.module_name , str(rlp.model_id))) 183 184 request.POST = {} 185 return main.change_stage(request, main.quote(obj._meta.app_label), main.quote(obj._meta.object_name), 186 main.quote(str(obj.id)), extra_context={"row_level_perm_msg":msg,})
