| 261 | | def has_perm(self, perm): |
|---|
| | 262 | def check_row_level_permission(self, permission, object): |
|---|
| | 263 | if isinstance(permission, str): |
|---|
| | 264 | permission = Permission.objects.get(codename__exact=permission) |
|---|
| | 265 | try: |
|---|
| | 266 | row_level_perm=self.row_level_permissions_owned.get(model_id=object.id, |
|---|
| | 267 | model_ct=ContentType.objects.get_for_model(object).id, |
|---|
| | 268 | permission=permission.id) |
|---|
| | 269 | except RowLevelPermission.DoesNotExist: |
|---|
| | 270 | return self.check_group_row_level_permissions(permission, object) |
|---|
| | 271 | return not row_level_perm.negative |
|---|
| | 272 | |
|---|
| | 273 | def check_group_row_level_permissions(self, permission, object): |
|---|
| | 274 | #SELECT rlp."negative" |
|---|
| | 275 | #FROM "auth_user_groups" ug, "auth_rowlevelpermission" rlp |
|---|
| | 276 | #WHERE rlp."owner_id"=ug."group_id" |
|---|
| | 277 | #AND ug."user_id"=%s |
|---|
| | 278 | #AND rlp."owner_ct_id"=%s |
|---|
| | 279 | #AND rlp."model_id"=%s |
|---|
| | 280 | #AND rlp."model_ct_id"=%s |
|---|
| | 281 | #AND rlp."permission_id"=%s; |
|---|
| | 282 | cursor = connection.cursor() |
|---|
| | 283 | sql = """ |
|---|
| | 284 | SELECT rlp.%s |
|---|
| | 285 | FROM %s ug, %s rlp |
|---|
| | 286 | WHERE rlp.%s = ug.%s |
|---|
| | 287 | AND ug.%s=%%s |
|---|
| | 288 | AND rlp.%s=%%s |
|---|
| | 289 | AND rlp.%s=%%s |
|---|
| | 290 | AND rlp.%s=%%s |
|---|
| | 291 | AND rlp.%s=%%s |
|---|
| | 292 | ORDER BY rlp.%s""" % ( |
|---|
| | 293 | backend.quote_name('negative'), backend.quote_name('auth_user_groups'), |
|---|
| | 294 | backend.quote_name('auth_rowlevelpermission'), backend.quote_name('owner_id'), |
|---|
| | 295 | backend.quote_name('group_id'), backend.quote_name('user_id'), |
|---|
| | 296 | backend.quote_name('owner_ct_id'), backend.quote_name('model_id'), |
|---|
| | 297 | backend.quote_name('model_ct_id'), backend.quote_name('permission_id'), |
|---|
| | 298 | backend.quote_name('negative')) |
|---|
| | 299 | cursor.execute(sql, [self.id, |
|---|
| | 300 | ContentType.objects.get_for_model(Group).id, |
|---|
| | 301 | object.id, |
|---|
| | 302 | ContentType.objects.get_for_model(object).id, |
|---|
| | 303 | permission.id,]) |
|---|
| | 304 | row = cursor.fetchone() |
|---|
| | 305 | if row is None: |
|---|
| | 306 | return None |
|---|
| | 307 | return not row[0] |
|---|
| | 308 | |
|---|
| | 309 | |
|---|
| | 310 | def has_perm(self, perm, object=None): |
|---|