django - How to make an Custom API root list based on permissions -


i wold personalize api_root list based on current user permissions, not endpoints visible level users.

ex.:

router.register(r'users',views.userviewset, base_name='users') router.register(r'groups', views.groupviewset, base_name='groups') router.register(r'schedules', views.callschedulesviewset, base_name='schedules') urlpatterns = [     url(r'^', include(router.urls)),   ... ] 

for "superuser" list should be:

  • users
  • groups
  • schedules

but "normaluser" list should be:

  • schedules

i have solved using following approach, maybe not elegant, serves example.

urls.py

router = routers.defaultrouter() router.register(r'users', views.userviewset, base_name='users') router.register(r'groups', views.groupviewset, base_name='groups') router.register(r'schedules', views.schedulesviewset, base_name='schedules')  urlpatterns = [     url(r'^$', views.apiroot.as_view()),     url(r'', include(router.urls)),     ... ] 

views.py

from rest_framework.views import apiview rest_framework.response import response  class apiroot(apiview):     """     api root ...     """     def get(self, request):         data = {             "users": "http://localhost:8000/users/",             "groups": "http://localhost:8000/groups/",             "schedules": "http://localhost:8000/schedules/",         }          if not request.user.is_superuser:             data.pop("users")             data.pop("groups")          return response(data) 

Comments