def test_permission_object_exceptions(datadir, setup):  # noqa
    with pytest.raises(PermissionObjectException):
        permissioned_model(
            CheckModel3, perm_type='check3',
            path_fields=('container', 'pk'),
            actions=[('check3.list', {'permissions_object': 'not-there'}),
                     ('check3.create', {'permissions_object': 'container'}),
                     'check3.detail',
                     'check3.delete']
        )

    with pytest.raises(PermissionObjectException):
        permissioned_model(
            CheckModel3, perm_type='check3',
            path_fields=('container', 'pk'),
            actions=[('check3.list', {'permissions_object': 'name'}),
                     ('check3.create', {'permissions_object': 'container'}),
                     'check3.detail',
                     'check3.delete']
        )

    with pytest.raises(DecoratorException):
        class Dummy(models.Model):
            pass
        permissioned_model(
            Dummy, perm_type='dummy',
            path_fields=('name',)
        )

    with pytest.raises(DecoratorException):
        class Dummy:
            pass
        permissioned_model(
            Dummy, perm_type='dummy',
            path_fields=('name',),
            actions=['dummy.list']
        )
Example #2
0
    def __str__(self):
        return self.name


class CheckModel2(models.Model):
    name = models.CharField(max_length=100)
    container = models.ForeignKey(CheckModel1)

    def __str__(self):
        return self.name


permissioned_model(
    CheckModel2, perm_type='check2',
    path_fields=('container', 'pk'),
    actions=[('check2.list', {'permissions_object': 'container'}),
             ('check2.create', {'permissions_object': 'container'}),
             'check2.detail',
             'check2.delete']
)


class CheckModel3(models.Model):
    name = models.CharField(max_length=100)
    container = models.ForeignKey(CheckModel1)

    def __str__(self):
        return self.name


@permissioned_model
class CheckModel4(models.Model):
Example #3
0
                               'permissions_object': 'project'}),
            ('parcel.detail', {'description': "View details of a parcel"}),
            ('parcel.edit',   {'description': "Update existing parcels"}),
            ('parcel.delete', {'description': "Delete parcels"})
        ]

    def get_absolute_url(self):
        return reverse('parcel-detail', kwargs={'pk': self.pk})


permissioned_model(
    Policy, perm_type='policy', path_fields=['name'],
    actions=[
        ('policy.list', {'description': "Can list existing policies",
                         'permissions_object': None}),
        ('policy.create', {'description': "Can create policies",
                           'permissions_object': None}),
        ('policy.detail', {'description': "Can view details of a policy"}),
        ('policy.edit',   {'description': "Can update existing policies"}),
        ('policy.delete', {'description': "Can delete policies"})
    ]
)
permissioned_model(
    User, perm_type='user', path_fields=['username'],
    actions=[
        ('user.list',   {'permissions_object': None}),
        ('user.create', {'permissions_object': None}),
        'user.detail',
        'user.edit',
        'user.delete'
    ]
)