私は現在has_change_permission
、カスタム django admin クラスのフックを利用して、単純な形式の行レベルのアクセス許可を実装し、非スーパーユーザーが特定のオブジェクトを編集できるかどうかを次のように判断しています。
def has_change_permission(self, request, obj=None):
if obj is None or request.user.is_superuser or (obj and not obj.superuser_only): # (my model has a 'superuser_only' flag that gets set via fixtures, but its beyond the scope of this question)
return True
return False
これは十分に機能します。すべてのオブジェクトがユーザーに表示されますが、編集権限のないオブジェクトをクリックすると、おそらく PermissionDenied が発生したため、403 ページに移動します。ただし、許可が拒否されたページへのハイパーリンクを提供することは、この場合には理想的ではないようです。オブジェクトを表示したいが、リスト ページの編集ページへのハイパーリンクを提供したくない (オブジェクトの URL を手動で使用しようとした場合に PermissionDenied を発生させることに加えて)。恐ろしいハックなしでこれらのハイパーリンクを削除するための簡単なフックはありますか? 私は経験豊富な django 開発者なので、正しい方向性 (存在する場合) を教えていただければ、詳細を実装するか、現時点では価値がないと判断できます。