Changeset 3531
- Timestamp:
- 08/07/06 12:28:16 (2 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/per-object-permissions/django/contrib/auth/models.py
r3529 r3531 50 50 class RowLevelPermissionManager(models.Manager): 51 51 def create_row_level_permission(self, model_instance, owner, permission, negative=False): 52 model_ct=ContentType.objects.get_for_model(model_instance) 52 53 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) 55 55 if model_ct != permission.content_type: 56 56 raise TypeError, "Invalid value: Permission content type(%s) and object content type(%s) do not match" % (permission.content_type, type_ct) … … 112 112 name = models.CharField(_('name'), maxlength=80, unique=True) 113 113 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") 115 115 class Meta: 116 116 verbose_name = _('group') … … 261 261 262 262 def check_row_level_permission(self, permission, object): 263 object_ct=ContentType.objects.get_for_model(object) 263 264 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 265 269 try: 266 270 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, 268 272 permission=permission.id) 269 273 except RowLevelPermission.DoesNotExist: … … 303 307 permission.id,]) 304 308 row = cursor.fetchone() 309 305 310 if row is None: 306 311 return None … … 315 320 return True 316 321 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) 318 324 if row_level_permission is not None: 319 325 return row_level_permission
