djangoのadminサイトでview onlyなページにしたい
djangoのadminページはとても強力なんですが不満な点があります。
それはユーザーのパーミッションにread onlyを指定できないことです。
是非とも標準で付けて欲しいです。
ググるとそれについて書いてあるサイトがちらほら出てくるんですけどAdminSiteをカスタムしてそういう機能を持たせるような解決法を取ってます。
これでも問題ないのですが、もう少し中にまで踏み込んでみたいと思いソースを眺めてみました。
add, change, deleteのパーミッションをつけてるところにviewってのを追記してみます。
(contrib/auth/management/__init__.pyの_get_all_permissions)
これでsyncdbするとauth_permissionにviewが追加されます。
で、これの呼び出し元とかパーミッションを判定しているところを修正してうまいことやります。結構大変です。
めんどくさいのがテンプレート周りで、changelistとかを参考にするとテキストが「変更」になってるのでこれを直す必要があります。
でも実は面倒だったのでやってません。ローカライズの問題もあるんで・・・。
ちなみにModelのMetaのオプションにpermissionsを指定するやり方があります。
全てのモデルにいちいち指定するのは煩わしいのでmodels.Modelを継承した抽象クラスにpermissionsを指定したものを一つ作ってそれを継承してモデルを作ろうとしてみましたが全部同じ名前になってしまうのでやめました。(当たり前だ)
permissionsは全てのモデルに対しての一括処理だと向いてなさそうです。