2016-03-31 6 views
1

私は現在、このメソッドを使用してユーザーに関連するページを提供しています。カスタムユーザー権限を適用するDjango

def get_user_url(request): 
    un = request.user.username 
    t = get_template(un + '.htm') 
    html = t.render() 
    return HttpResponse(http) 

私は少数のユーザーを期待していた、それぞれが会社を代表するので、私は単純に異なるコンテンツを有する5つのまたは6 htmlファイルを持っている可能性があるので、これは問題ではありませんでした。 今、私は会社ごとに複数のユーザーのアカウントを設定するように求められています。

私はカスタムアクセス許可のためにドキュメントを見ました:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#custom-permissionsこれはうまくいくかもしれませんが、以下のような30行のアクセス権クラスで終わる可能性があり、それは悪い方法です。

permissions = (
     ("company1_permission1", "Company 1 Permission 1"), 
     ("company1_permission2", "Company 1 Permission 2"), 
     ("company2_permission1", "Company 1 Permission 1"), 
     ("company2_permission2", "Company 1 Permission 2"), 
     ("company3_permission1", "Company 1 Permission 1"), 
    ) 

「会社」フィールドをユーザーに追加して上記の両方の方法を使用する方法はありますか?したがって、ユーザーは適切な会社からのものでなければページにアクセスすることさえできません。そのページでは、そのページのコンテンツにカスタム権限を適用します。

また、この種の機能を実現するためのより良い方法があります。 私はdjangoとpythonを初めて使用しています。

答えて

1

良い解決策は、@user_passes_test() decoratorを使用することです。

ドキュメントは、ユーザーの電子メールは、あなたが簡単にあなたのユースケースのために適合させることができ、特定の企業、からであることを確認させるための良い例を与える:

from django.contrib.auth.decorators import user_passes_test 

def email_check(user): 
    return user.email.endswith('@example.com') 

@user_passes_test(email_check) 
def my_view(request): 
    ... 

このアプローチの主な問題は、あなたができることです」コード内のrequestオブジェクトにアクセスします。解決策は、UserPassesTestMixinself.requestにアクセスするクラスベースのビューを使用することです。

+0

この問題はmy_view(要求)によって解決されていませんか? –

+0

はい、それを解決することができます。あなたは 'email_check'コードの' request'オブジェクトにアクセスすることはできません。そこにある現在の 'user'オブジェクトだけです。 – YPCrumble

関連する問題