いつもお世話になっております。
表題についてですが、現在django-rulesを用いてパーミッション設定をしていたのですが、
以下の使用で作成してところ、条件に一致していないにもかかわらずsuperuserではTrueになってしまいます。
- AAAグループに入っている場合は
is_aaa
という権限を保持 - templatesやviews.pyで 1 の条件を用いて条件分岐させる
厳密には、templates側ではsuperuserでもFalseになるのですが、
views.pyではTrueになってしまいます。
このtemplates側ではhas_perm()はFalse、views.py側ではTrueとなることに混乱しています。
どなたかわかる方がいらっしゃればご教授いただけると幸いです。
#rules.py import rules from rules import has_perm is_admin = rules.is_group_member( 'is_admin' ) is_aaa = rules.is_group_member( 'aaa' ) @rules.predicate def is_aaa_group(user): return user.has_perm( 'is_aaa' ) # Permissions rules.add_perm( 'is_admin', is_admin ) rules.add_perm( 'is_aaa', is_aaa )
↓は上手く動作します。つまりis_admin
ではスーパーユーザーのみ閲覧可。is_aaa
ではAAAグループのみ閲覧可。
html
1{% extends "base.html" %} 2{% load static %} 3{% load rules %} 4{% has_perm 'is_admin' request.user as is_admin %} 5{% has_perm 'is_aaa' request.user as is_aaa %} 6 7{% block content %} 8 9 10 {% if is_admin %}javascript:void(0) 11 12 <li>スーパーユーザーのみ閲覧可</li> 13 14 {% elif is_aaa %} 15 16 <li>AAAグループのみ閲覧可(※スーパーユーザー閲覧不可)</li> 17 18 {% endif %} 19 20 21{% endblock %}
class BookListView( ListView ): model = Book template_name = 'index.html' def get( self, request, *args, **kwargs ): user = self.request.user # ここでrules.pyのis_aaa_group()を呼び出してみる。 print( is_aaa_group(user) ) return super().get( request, *args, **kwargs ) # スーパーユーザー -> True # aaaグループ -> True
あなたの回答
tips
プレビュー