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 という権限を持っていれば、そのグループのすべてのユーザは、その権限を持つことになります。
Groups|Using the Django authentication system
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.
読んでたけど、確かにそう言われて読んでみるとそう読めるかも!なんとなくは読めるけど、やっぱり細かいニュアンスが分からなくて、すごい時間を食ってしまう... 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