Django

Code

Changeset 3891

Show
Ignore:
Timestamp:
10/03/06 08:19:19 (2 years ago)
Author:
clong
Message:

[per-object-permissions] First version where inline objects are checked for row level permissions

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/per-object-permissions/django/contrib/admin/templates/admin/edit_inline_stacked.html

    r3464 r3891  
    22<fieldset class="module aligned"> 
    33   {% for fcw in bound_related_object.form_field_collection_wrappers %} 
     4   {% load row_level_permission %} 
     5   {% check_rlp_inline fcw.original %} 
    46      <h2>{{ bound_related_object.relation.opts.verbose_name|capfirst|escape }}&nbsp;#{{ forloop.counter }}</h2> 
    57      {% if bound_related_object.show_url %}{% if fcw.obj.original %} 
     
    1315         {% endif %} 
    1416      {% endfor %} 
     17    {% end_check_rlp_inline %} 
    1518    {% endfor %} 
    1619</fieldset> 
  • django/branches/per-object-permissions/django/contrib/admin/templates/admin/edit_inline_tabular.html

    r3583 r3891  
    1010   </tr></thead> 
    1111   {% for fcw in bound_related_object.form_field_collection_wrappers %} 
     12   {% load row_level_permission %} 
     13   {% check_rlp_inline fcw.original %} 
    1214      {% if change %}{% if original_row_needed %} 
    1315         {% if fcw.obj.original %} 
     
    3234      </td>{% endif %} 
    3335      </tr> 
    34  
     36    
     37   {% end_check_rlp_inline %} 
    3538   {% endfor %} </table> 
    3639 
  • django/branches/per-object-permissions/django/contrib/admin/templatetags/admin_modify.py

    r3810 r3891  
    120120    def __init__(self, field_mapping, fields, index): 
    121121        self.field_mapping = field_mapping 
     122        self.original = field_mapping['original'] 
    122123        self.fields = fields 
    123124        self.bound_fields = [AdminBoundField(field, self.field_mapping, field_mapping['original']) 
     
    128129    def __init__(self, related_object, field_mapping, original): 
    129130        super(TabularBoundRelatedObject, self).__init__(related_object, field_mapping, original) 
     131         
    130132        self.field_wrapper_list = [FieldWrapper(field) for field in self.relation.editable_fields()] 
    131  
     133         
    132134        fields = self.relation.editable_fields() 
    133  
     135         
    134136        self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping, fields, i) 
    135137                                               for (i,field_mapping) in self.field_mappings.items() ] 
     138         
    136139        self.original_row_needed = max([fw.use_raw_id_admin() for fw in self.field_wrapper_list]) 
     140        if original: 
     141            self.original = original 
    137142        self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') 
    138143 
     
    148153        self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping ,fields, i) 
    149154                                               for (i,field_mapping) in self.field_mappings.items()] 
     155 
     156        if original: 
     157            self.original = original 
     158         
    150159        self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') 
    151160 
  • django/branches/per-object-permissions/django/contrib/admin/templatetags/row_level_permission.py

    r3810 r3891  
    3535    return objref_class(tok) 
    3636 
     37def check_rlp_inline(parser, token): 
     38    tokens = token.split_contents() 
     39    if len(tokens)!=2: 
     40        raise template.TemplateSyntaxError, "%r tag requires only 1 arguments" % tokens[0] 
     41     
     42    nodelist = parser.parse(('end_'+tokens[0],)) 
     43    token = parser.next_token()     
     44     
     45    object_var = parser.compile_filter(tokens[1]) 
     46     
     47    return CheckRLPInlineNode(object_var, nodelist) 
     48 
     49class CheckRLPInlineNode(template.Node): 
     50    def __init__(self, object_var, nodelist): 
     51        self.object_var = object_var 
     52        self.nodelist = nodelist 
     53         
     54    def render(self, context): 
     55        if self.object_var: 
     56            try: 
     57                object = self.object_var.resolve(context) 
     58            except template.VariableDoesNotExist: 
     59                return self.nodelist.render(context) 
     60        else: 
     61            return self.nodelist.render(context) 
     62         
     63        if object is None: 
     64            return self.nodelist.render(context)             
     65         
     66        if not object._meta.row_level_permissions: 
     67            return self.nodelist.render(context) 
     68         
     69        try: 
     70            user = template.resolve_variable("user", context) 
     71        except template.VariableDoesNotExist: 
     72            return settings.TEMPLATE_STRING_IF_INVALID 
     73         
     74        permission = object._meta.get_change_permission() 
     75         
     76        bool_perm = user.has_perm(object._meta.app_label+'.'+permission, object=object) 
     77         
     78        if bool_perm: 
     79            return self.nodelist.render(context) 
     80        return "" 
     81         
     82         
     83         
     84         
     85 
    3786#From: http://code.djangoproject.com/wiki/PaginatorTag 
    3887def paginator(context, adjacent_pages=2): 
     
    59108 
    60109register.tag('objref', objref) 
     110register.tag('check_rlp_inline', check_rlp_inline)