Django

Code

Changeset 3615

Show
Ignore:
Timestamp:
08/19/06 11:27:56 (2 years ago)
Author:
clong
Message:

[per-object-permissions] Updating admin interface of RLP to be on a separate page, not entirely working at this point
[per-object-permissions] Changed global.css to apply styles to reset button

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/per-object-permissions/django/contrib/admin/media/css/global.css

    r3464 r3615  
    9191input[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; } 
    9292input[type=submit].default:active { background-image:url(../img/admin/default-bg-reverse.gif); background-position:top; } 
     93/* RESET BUTTONS */ 
     94input[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; } 
     95input[type=reseet]:active, input[type=button]:active { background-image:url(../img/admin/nav-bg-reverse.gif); background-position:top; } 
     96input[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; } 
     97input[type=reset].default:active { background-image:url(../img/admin/default-bg-reverse.gif); background-position:top; } 
    9398 
    9499/* MODULES */ 
  • django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py

    r3610 r3615  
    117117            choice_list.extend([(ct.name.title(), object_choice)]) 
    118118            #choice_list.extend([(MultipleObjSelectField.returnKey(o, ct=ct), str(o)+" ("+ct.name.title()+")") for o in obj_choices]) 
    119         print choice_list 
    120119        super(MultipleObjSelectField, self).__init__(field_name, choices=choice_list,  
    121120                                                     size=size, is_required=is_required,  
  • django/branches/per-object-permissions/django/contrib/admin/templates/admin/change_form.html

    r3583 r3615  
    6767</form> 
    6868 
     69{% comment %} 
    6970{% if new_rlp_form  %} 
    7071<div id="row_level_perm_container"> 
     
    7273</div> 
    7374{% endif %} 
     75{% endcomment %} 
    7476 
    7577</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> &rsaquo; 
     15     <a href="../../">{{ opts.verbose_name_plural|capfirst|escape }}</a> &rsaquo; 
     16     <a href="../">{{ original|truncatewords:"18"|escape }}</a> &rsaquo;  
     17     {{ title|escape }} 
     18</div> 
     19{% endblock %} 
     20{% block content %}<div id="content-main"> 
     21<div id="changelist"> 
    222 
    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" %} 
    924<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/"> 
    1126<table id="add-rlpTable"> 
    1227<tr class="header"> 
     
    4762</table> 
    4863</form> 
     64{% end_if_has_perm %} 
    4965 
     66{% if_has_perm "auth.change_rowlevelpermission" %} 
    5067<h2>{% trans "Current Permissions" %}</h2> 
    5168<table id="current-rlpTable"> 
     
    91108                <br/> 
    92109                <!--<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="deleteLink">{% trans 'Delete' %}</a> |  
     110                <a href="../../../auth/row_level_permission/{% objref o.rlp %}/delete/" class="deletelink">{% trans 'Delete' %}</a> |  
    94111                <a href="javascript:row_level_permission.copyToNew({{ o.rlp.id }})" class="copyToNewLink">{% trans 'Copy to New' %}</a> 
    95112        </td>    
     
    105122                        <input id="apply_selected_button" type="submit" value="{% trans 'Apply Selected' %}" /> 
    106123                </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> 
    107127        </td> 
    108128</tr> 
     129{% if is_paginated %} 
     130<tr align="right"> 
     131<td colspan="5"> 
     132{% if has_previous %} <a href="?page={{ previous }}"> &lt;&lt; </a> {% endif %} {% if has_next %} <a href="?page={{ next }}"> &gt;&gt; </a>{% endif %} 
     133</td> 
     134</tr> 
     135{% endif %} 
    109136</TBODY> 
    110137</table> 
     
    112139<em>{% trans 'No row level permissions'%}</em> 
    113140{% endif %} 
     141{% end_if_has_perm %} 
     142</div> 
     143</div> 
     144{% endblock %} 
  • django/branches/per-object-permissions/django/contrib/admin/urls.py

    r3584 r3615  
    3131    ('^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'), 
    3232    ('^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'), 
    3435 
    3536    # "Add user" -- a special-case view 
     
    4142    ('^([^/]+)/([^/]+)/(.+)/history/$', 'django.contrib.admin.views.main.history'), 
    4243    ('^([^/]+)/([^/]+)/(.+)/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'), 
    4346    ('^([^/]+)/([^/]+)/(.+)/$', 'django.contrib.admin.views.main.change_stage'), 
    4447) 
  • django/branches/per-object-permissions/django/contrib/admin/views/row_level_permissions.py

    r3540 r3615  
    11from django.contrib.admin import utils 
     2from django import forms, template 
    23from django.shortcuts import render_to_response, get_object_or_404 
    34from django.http import Http404, HttpResponse, HttpResponseRedirect 
    45from django.contrib.contenttypes.models import ContentType 
    56from django.contrib.auth.models import RowLevelPermission 
     7from django.contrib.admin.views import main 
     8from django.db import models 
    69from django.contrib.admin.row_level_perm_manipulator import AddRLPManipulator, ChangeRLPManipulator 
    710from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist, PermissionDenied 
     11from django.core.paginator import ObjectPaginator, InvalidPage 
    812import simplejson 
     13 
     14def 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) 
    971 
    1072def delete_row_level_permission(request, ct_id, rlp_id, hash): 
    1173    msg = {} 
    12     ajax = request.GET.has_key("ajax") 
    1374    if utils.verify_objref_hash(ct_id, rlp_id, hash): 
    1475        rlp = get_object_or_404(RowLevelPermission, pk=rlp_id) 
    1576        ct = rlp.model_ct 
    1677        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()): 
    1980            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): 
    2182            raise PermissionDenied            
     83 
    2284        rlp.delete() 
    2385        msg = {"result":True, "text":_("Row level permission was successful deleted"), "id":rlp_id} 
    2486    else: 
    2587        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))) 
    3188 
    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 
     97def add_row_level_permission(request, app_label, model_name, object_id): 
    3398    msg = {} 
    34     ajax = request.GET.has_key("ajax") 
    3599    if not request.POST: 
    36100        msg = { 'result':False, 'text': _("Only POSTs are allowed" )}  
    37         if ajax: 
    38             return HttpResponse(simplejson.dumps(msg), 'text/javascript') 
     101 
    39102        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))   
    41104 
    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): 
    45112        raise PermissionDenied   
    46113 
     
    65132        else: 
    66133            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      
    71134     
    72135    resp_list = [] 
     
    75138        resp_list.append({"id":rlp.id, "permission":rlp.permission.id, "hash":hash}) 
    76139    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("../") 
    78144 
    79145def change_row_level_permission(request, ct_id, rlp_id, hash):     
     
    97163        raise PermissionDenied   
    98164 
    99     object_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): 
    101167        raise PermissionDenied 
    102168     
     
    115181    if ajax: 
    116182        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,})