Django

Code

Changeset 3531

Show
Ignore:
Timestamp:
08/07/06 12:28:16 (2 years ago)
Author:
clong
Message:

[per-object-permissions] Fixed RLP perm checking so it now accepts the string app_label.perm_codename format correctly.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/per-object-permissions/django/contrib/auth/models.py

    r3529 r3531  
    5050class RowLevelPermissionManager(models.Manager): 
    5151    def create_row_level_permission(self, model_instance, owner, permission, negative=False): 
     52        model_ct=ContentType.objects.get_for_model(model_instance)         
    5253        if isinstance(permission, str): 
    53             permission = Permission.objects.get(codename__exact=permission) 
    54         model_ct=ContentType.objects.get_for_model(model_instance) 
     54            permission = Permission.objects.get(codename__exact=permission, content_type=model_ct.id) 
    5555        if model_ct != permission.content_type: 
    5656            raise TypeError, "Invalid value: Permission content type(%s) and object content type(%s) do not match" % (permission.content_type, type_ct) 
     
    112112    name = models.CharField(_('name'), maxlength=80, unique=True) 
    113113    permissions = models.ManyToManyField(Permission, verbose_name=_('permissions'), blank=True, filter_interface=models.HORIZONTAL) 
    114     row_level_permissions_owned = models.GenericRelation(RowLevelPermission, object_id_field="owner_id", content_type_field="owner_ct", related_name="owner") 
     114    row_level_permissions_owned = models.GenericRelation(RowLevelPermission, object_id_field="owner_id", content_type_field="owner_ct", related_name="group") 
    115115    class Meta: 
    116116        verbose_name = _('group') 
     
    261261 
    262262    def check_row_level_permission(self, permission, object): 
     263        object_ct=ContentType.objects.get_for_model(object) 
    263264        if isinstance(permission, str): 
    264             permission = Permission.objects.get(codename__exact=permission) 
     265            try: 
     266                permission = Permission.objects.get(codename__exact=permission, content_type=object_ct.id) 
     267            except Permission.DoesNotExist: 
     268                return False 
    265269        try: 
    266270            row_level_perm=self.row_level_permissions_owned.get(model_id=object.id,  
    267                                                                     model_ct=ContentType.objects.get_for_model(object).id,  
     271                                                                    model_ct=object_ct.id,  
    268272                                                                    permission=permission.id) 
    269273        except RowLevelPermission.DoesNotExist: 
     
    303307                             permission.id,]) 
    304308        row = cursor.fetchone() 
     309 
    305310        if row is None: 
    306311            return None 
     
    315320            return True 
    316321        if object and object._meta.row_level_permissions: 
    317             row_level_permission = self.check_row_level_permission(perm, object) 
     322            permission_str = perm[perm.index('.')+1:] 
     323            row_level_permission = self.check_row_level_permission(permission_str, object) 
    318324            if row_level_permission is not None: 
    319325                return row_level_permission