0

私はdjangoを初めて使用し、そのモジュラー構造が本当に好きなので、それを利用して、すべての分離された機能をそれぞれ異なるアプリに配置することにしました。

ここで、ユーザーと管理者の両方がこのアプリのオンとオフを切り替える方法が必要です。ユーザー オプション パネルは次のようになります。


   [ ] ブログ
   ----------------------
   [ ] タグ付け  [購入]

「ブログ」オプションをチェックした後、ユーザーは自分のプロフィールでブログを取得し、「タグ付け」を購入してチェックした後、ブログのタグ付けを取得します。


管理パネルには、ユーザー パネルからアプリを表示または非表示にする機能があります。

かしら:

  1. 特定のユーザー向けにアプリのオンとオフを切り替えるのに役立つアプリがあります
  2. そうでない場合 -
    1. そのようなジャンゴアプリの適切な「アーキテクチャ」は何でしょうか?
    2. ミドルウェアで動的に実行できますか、それともログイン中に実行する必要がありますか (データベースから利用可能なアプリを確認し、それらをオンにし、ユーザーのホームページにリダイレクトします)?
    3. そのようなタスクに対するアドバイスはありますか?

ありがとう、ロバート

4

1 に答える 1

0

そのようなアプリは聞いたことがありません… しかし、構築するのがそれほど難しいとは思いません。

私がそうしていたら、各アプリへのエントリ ポイントにパーミッション チェックを入れます。例えば:

check_app_permission = lambda request: permissions.check_app_permission("blog", request)

def view_blog(request, …):
    check_app_permission(request)
    …

(何らかの魔法をかけて、このチェックをレベルに注入することさえ可能かもしれませんurls.py…)

さらに、has_app_permissionテンプレート タグを作成します。

<div id="sidebar">
    {% if has_app_permission "blog" %}
        {% include "blog/sidebar_recent_posts.html" %}
    {% endif %}
</div>

または類似。

最後に、パーミッション システム実装する方法は約 100 万通りあります。これ以上の情報がなければ、コメントできません。ただし、最も単純なのは次のようなものです。

class App(Model):
    name = CharField(…)

class AppPermission(object):
    app = ForeignKey(App)
    user = ForiegnKey(User)

def user_has_permission(user, app_name):
    return AppPermission.objects.filter(app__name=app_name, user=user).exists()

ミドルウェアでこれをやろうとするのは避けたいと思います。なぜなら、私が問題を正しく理解していれば、最終的に汎用フレームワークの構築に多くの時間を費やすことになるだろう (または、少なくとも私はそうなると思う) からです。上記と同様のチェックが行われます。

それは役に立ちますか?明確にできることはありますか?

于 2011-08-03T07:24:35.427 に答える