質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.43%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

964閲覧

【django】superuserはhas_perm()では常にTrue?

matsuo_basho

総合スコア88

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/30 05:05

編集2021/01/30 05:36

いつもお世話になっております。
表題についてですが、現在django-rulesを用いてパーミッション設定をしていたのですが、
以下の使用で作成してところ、条件に一致していないにもかかわらずsuperuserではTrueになってしまいます。

  1. AAAグループに入っている場合はis_aaaという権限を保持
  2. 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.43%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問