Ejemplo n.º 1
0
def managed_perms_create(sender, **kwargs):
    inst = kwargs.get("instance")

    if not hasattr(inst, "nsp_managed"):
        return

    user_field_name, perms = inst.nsp_managed
    UserPermission.objects.create(
        user=getattr(inst, user_field_name),
        permissions=perms,
        namespace=obj_to_namespace(inst),
    )
Ejemplo n.º 2
0
def managed_perms_remove(sender, **kwargs):
    inst = kwargs.get("instance")
    if not hasattr(inst, "nsp_managed"):
        return

    user_field_name, perms = inst.nsp_managed

    perms = UserPermission.objects.filter(
        user=getattr(inst, user_field_name), namespace=obj_to_namespace(inst)
    ).all()

    for p in perms:
        p.delete()
Ejemplo n.º 3
0
    def has_module_perms(self, user_obj, obj=None):
        if hasattr(obj, "nsp_namespace"):
            fn = getattr(obj, "nsp_namespace")
            if not isinstance(fn, collections.Callable):
                raise Exception(
                    "nsp_namespace attribute needs to be callable for %s" %
                    obj)
            namespace = fn()
        else:
            namespace = obj_to_namespace(obj)

        log.info("Checking module perms: %s" % namespace)

        perms = self.load_perms(user_obj)

        return has_perms(perms, namespace, PERM_READ)
Ejemplo n.º 4
0
    def has_object_permission(self, request, view, obj):
        self.debug(
            "Check Object permissions %s, %s, %s"
            % (request.method, request.user, obj_to_namespace(obj))
        )

        if request.method in permissions.SAFE_METHODS:
            return has_perms(request.user, obj, PERM_READ)
        else:
            func_name = "nsp_has_perms_%s" % request.method
            if hasattr(obj, func_name):
                func = getattr(obj, func_name)
                return func(request.user, request)
            else:
                return has_perms(
                    request.user,
                    obj,
                    get_permission_flag(method_to_permcode(request.method)),
                )
Ejemplo n.º 5
0
 def test_namespace_classmethods(self):
     self.assertEqual(util.obj_to_namespace(ModelTestC),
                      "test.django_namespace_perms")
     self.assertEqual(util.obj_to_namespace(ModelTestD),
                      "create.test.django_namespace_perms")
Ejemplo n.º 6
0
 def test_namespace(self):
     obj = ModelTestB()
     obj.id = 1
     namespace = util.obj_to_namespace(obj)
     self.assertEqual(namespace, "tests.modeltestb.1")
Ejemplo n.º 7
0
 def test_namespace_override(self):
     obj = ModelTestA()
     obj.id = 1
     namespace = util.obj_to_namespace(obj)
     self.assertEqual(namespace, "test.django_namespace_perms.modeltesta.1")