Django の Group モデルについて

Facebook とか mixi のグループ機能みたいに、各グループごとに管理人を作って、管理人だけコンテンツの削除とか、ユーザをグループから追い出すような機能がないか探してた。

◯ 結論

  • Django の Group にはデフォルトでは付いていない機能で、どうもなさそう。
  • django-guardian というパッケージをダウンロード&インストール
  • Group を拡張して権限を設定(例えば admin, member 等)

 

class Team(Group):
  class Meta:
    permissions = (
      ('admin', 'グループの管理人さん'),
      ('member', 'グループのメンバーさん'),
    )

 
Group の拡張には、このあたりも参考に...。
python - How to extend Django Group and still use in Django User - Stack Overflow
python - How do I extend the Django Group model? - Stack Overflow
 


◯ いろいろ調べたこと

そんなにたくさんのことは Group じゃできないよ。これはほとんど、ただ単にユーザをまとめて権限を適用する機能しかないんだ。ちょうど Linux の Group みたいにね。もしあなたが permission をある Group に与えたら、その Group に所属する他のすべてのメンバーに権限を与えることになるんだ。ドキュメントに全部そう書いてあるだろバーローwww Groups|Using the Django authentication system
 

There isn't a whole lot to groups, they're mostly just for bundling users together to apply permissions, much like Linux user groups. You give a permission to a Group and it extends to all members of that group. The documentation says it all really:Groups|Using the Django authentication system

How do I use Django groups and permissions?

 

で、ドキュメントを見ます。

django.contrib.auth.models.Group モデルは、ユーザを分類する一般的な方法で、それは permission もしくは、その他の label をユーザに適用するものです。Group は複数のグループに所属することができます。
django.contrib.auth.models.Group models are a generic way of categorizing users so you can apply permissions, or some other label, to those users. A user can belong to any number of groups.
 

Group のユーザは、Group に既に与えられている permission を自動的に持つことになります。例えば、もし Site editor という Group が can_edit_home_page という権限を持っていれば、そのグループのすべてのユーザは、その権限を持つことになります。
A user in a group automatically has the permissions granted to that group. For example, if the group Site editors has the permission can_edit_home_page, any user in that group will have that permission.

Groups|Using the Django authentication system

読んでたけど、確かにそう言われて読んでみるとそう読めるかも!なんとなくは読めるけど、やっぱり細かいニュアンスが分からなくて、すごい時間を食ってしまう... orz あと "A user in a group automatically has the permissions granted to that group. For example, if the group Site editors has the permission can_edit_home_page, any user in that group will have that permission." これ、もうちょっとわかりやすい文章にならんかな...。

後ろの方のコメントを読んでみると、関連のライブラリが GitHub とかで公開されてるから、そういうのも参考にねってあったけど、どうしたものか。Django の DRY(don't repeat yourself) の精神で絶対にはいってると思ったのに。逆にはいってないってことは、 Facebook やら mixi 的なサイトはあんまり意識してなくて、本当にもっと小規模なのを対象にしてるってことなのかな。

でも、本当にかなり作りこまれてるから、そういうわけではないと思うんだけど...。Django のもともとの生い立ちがニュースサイトから始まってて、みんなで admin 画面をパチパチ打ち込むような環境だったから、そう言った機能がはいってないというか、想定外なのかな。チュートリアルのあの poll アプリケーションも、そもそもアプリの動作がなかなか理解しづらくて泣けたけど、同じようなところが原因なのかな...。



◯ その他
ここのページに同じことが質問されてるけど、どうも違う感じがする。
User groups and permissions

Group は Authentication 関係のドキュメントに...。
User authentication in Django | Django documentation | Django

自分でユーザモデルを拡張したりして自作するかな...。
Django で User モデルの継承について -


◯ これかな...
このパッケージをインストールすれば、ええんかな。
django-guardian - per object permissions for Django

Django パッケージのまとめサイト!こんなものがあるんですね...。
Django Packages : Reusable apps, sites and tools directory