Source code for rbac.decorators

""" RBAC Decorators to simplify code """

from django.shortcuts import redirect
from .core import rbac_user_has_role
from .views import rbac_forbidden


[docs] def rbac_check_role(role1, role2=None): """checks if a users has a role, optionally checks against a second role as well, either will pass. Call as: from rbac.decorators import rbac_check_role @rbac_check_role("some_app.some_role") def my_func(request): OR @rbac_check_role("some_app.some_role", "some_role.some_other_role") def my_func(request): You don't need @login_required as it does that for you as well """ # Need two layers of wrapper to handle the parameters being passed in def _method_wrapper(function): # second layer def _arguments_wrapper(request, *args, **kwargs): # Test if logged in if not request.user.is_authenticated: return redirect("/") # Test role1 if rbac_user_has_role(request.user, role1): return function(request, *args, **kwargs) elif role2 and rbac_user_has_role(request.user, role2): return function(request, *args, **kwargs) else: return rbac_forbidden(request, role1) return _arguments_wrapper return _method_wrapper