2

Django のユーザー権限に問題があります。Magasin以下に示すように、モデルにいくつかの権限を追加しました。

add_magasin=Permission.objects.get(codename="add_magasin")
change_magasin=Permission.objects.get(codename="change_magasin")
delete_magasin=Permission.objects.get(codename="delete_magasin")
user.user_permissions.add(add_magasin)
user.user_permissions.add(change_magasin)
user.user_permissions.add(delete_magasin)
user.save()

次に、許可を確認すると、次のようになります。

In [100]: user.has_perm(delete_magasin)
Out[100]: False

In [101]: user.has_perm(add_magasin)
Out[101]: False

In [102]: user.has_perm(change_magasin)
Out[102]: False

同じユーザーに接続されている管理者では、Magasin インスタンスを追加できますが、削除することはできません (「許可が拒否されました」)。スーパーユーザーで Magasin インスタンスを削除することさえできません。

私はDjango 1.3を使用しており、外部の権限関連のアプリは使用していません...

編集: SQL クエリ

mysql> select * from django_content_type;
+----+-----------------------+--------------+------------------+
| id | name                  | app_label    | model            |
+----+-----------------------+--------------+------------------+
***more stuff***
|  9 | magasin               | securite_v2  | magasin          |
***more stuff***


mysql> select * from auth_permission;
+----+----------------------------------+-----------------+-------------------------+
| id | name                             | content_type_id | codename                |
+----+----------------------------------+-----------------+-------------------------+
***more stuff***
| 25 | Can add magasin                  |               9 | add_magasin             |
| 26 | Can change magasin               |               9 | change_magasin          |
| 27 | Can delete magasin               |               9 | delete_magasin          |
***more stuff***


mysql> select * from auth_user where id=135;
+-----+---------------+------------+-----------+-------------------------------+-----------------------------------------------------+----------+-----------+--------------+---------------------+---------------------+
| id  | username      | first_name | last_name | email                         | password                                            | is_staff | is_active | is_superuser | last_login          | date_joined         |
+-----+---------------+------------+-----------+-------------------------------+-----------------------------------------------------+----------+-----------+--------------+---------------------+---------------------+
| 135 | admingrandest |            |           | admingrandest@xxx.com | sha1$14f21$02a50f37be16f27aba3f677618b663edfb0ce5a7 |        1 |         1 |            0 | 2012-06-25 11:16:35 | 2012-06-22 16:42:46 |
+-----+---------------+------------+-----------+-------------------------------+-----------------------------------------------------+----------+-----------+--------------+---------------------+---------------------+


mysql> select * from auth_user_user_permissions;
+----+---------+---------------+
| id | user_id | permission_id |
+----+---------+---------------+
|  1 |     135 |            25 |
|  2 |     135 |            26 |
|  3 |     135 |            27 |
***more stuff***

何が間違っている可能性がありますか?

4

2 に答える 2

2

の最初の引数は、形式User.has_perm()の文字列でなければなりません。コードでは、インスタンスを最初の引数として<app label>.<permission codename>渡しています。これは に評価されるため、常に が返されます。Permission<app_label> | <content_type> | <name>has_permFalse

代わりに使用user.has_perm("<yourapp>.delete_magasin")

于 2012-06-25T09:41:15.623 に答える
0

Django ユーザーのアクセス許可ではなく、ファイルのアクセス許可に関係しているようです。

于 2012-06-26T06:08:32.243 に答える