如何根据权限制作自定义API根列表

时间:2016-07-21 16:03:23

标签: django django-rest-framework

我希望根据当前用户权限个性化api_root列表,以便并非所有级别用户都可以看到所有端点。

例:

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)),
  ...
]

对于" 超级用户"列表应该是:

  • 用户
  • 调度

但对于" normaluser "列表应该只是:

  • 调度

2 个答案:

答案 0 :(得分:1)

我使用以下方法解决了这个问题,可能不是最优雅的方法,但它可以作为一个例子。

<强> urls.py

ceylon import-jar

<强> views.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)),
    ...
]

答案 1 :(得分:0)

路线在申请开始时注册。每次通话都不会发生这种情况。所以你想要的可能是不可能的。

您可以做的一件事是返回404 error not found而不是403 unauthorized error/access dened,以便用户无权访问。从用户的角度来看,路由不存在。