Pythonの日78ジャンゴRBAC役割ベースのアクセス制御

  ## RBAC

RBAC(役割ベースのアクセス制御、役割ベースのアクセス制御)、すなわち、ユーザの役割と権限を関連付けることによって、です。簡単に言えば、ユーザーはいくつかの役割を持っている、役割は特権の数を持っています。このように、それは「 - -役割のユーザーに設定されているライセンスモデル許可」。このモデルでは、ユーザとロールの間で役割と権限の間に多くの関係があります。


#1 注: 
グローバルなエラーが直接ありません場合はジャンゴが、彼らは時間を見つけるために、テンプレートと静的ファイルで、各アプリケーションの下で、通常を導入することができ、テンプレートと静的フォルダを見つけるために、これはジャンゴに基づいて、アプリケーション開発の利点であります

  ##役割ベースのアクセス制御の場合、以下のようにしています

  ##モデルがapp01のアプリケーションで3つのテーブルを作成するには

django.db 輸入モデル

#は、ここにあなたのモデルを作成します。

クラスのユーザー(models.Model):
    ユーザ名 = models.CharField(max_lengthを= 32 
    パスワード = models.CharField(max_lengthを= 32 
    の役割 =(=にmodels.ManyToManyField ' 役割' 

    デフ __str__ (自己):
         戻りself.username
 クラスの役割(models.Model):
    タイトル = models.CharField(MAX_LENGTH = 32 
    権限 = models.ManyToManyField(=に' 許可'デフ __str__ (自己):
         戻りself.titleの
 クラスのパーミッション(models.Model):
    タイトル = models.CharField(max_lengthを= 32 
    のurl = 255 = models.CharField(MAX_LENGTH デフ __str__ (自己):
         戻り self.title

  ##はスタークRBAC構成された完成したアセンブリに導入された、機能はアセンブリ赤裸々に似ジャンゴ機能はデフォルト管理者が来るです

  ##スタークでアプリケーション設定を構成します

  ## stark.pyファイルapp01アプリケーションを作成して、モデルテーブルを登録します

stark.service.starkの輸入サイト、ModelStark
 から app01 輸入モデル


site.register(models.User)
site.register(models.Role)
site.register(models.Permission)

  ##ログ機能

#1 login.htmlと 
{%が延びる' スターク/ base.html '} 


{%ブロックコンテンツ%}
     <フォームアクション= ""メソッド= " ポスト" > 
    <H2 クラス = " テキスト中心の" >登录</ H2> 
    {%csrf_token%}
     <P>名:の<input type = " テキスト"  クラス = " フォームコントロール" NAME = " ユーザ名" > </ P> 
    <P>パスワード:<input type = " パスワード"  クラス = " フォームコントロール" NAME = " パスワード" > </ P> 
        の<input type = " 提出"  クラス = " BTN BTN-INFO-右プル" > 
    </ form>を
{%の末端ブロック%} 

后端
DEF ログイン(リクエスト):

    もし request.method == ' POST ' 
        ユーザ名 = request.POST.get(' ユーザ名' 
        パスワード = request.POST。取得( " パスワード' 
        USER_OBJ = models.User.objects.filter(ユーザ名=ユーザ名、パスワード= パスワード)1次回()
         IF USER_OBJ:
             #1 現在のユーザーの状態を記録 
            ますrequest.session作る[ ' ユーザ名" ] = user_obj.username
             取得現在のユーザーのアクセスだけでなく、再へ 
            permission_list = user_obj.roles.values(' permissions__url ' ).distinct()
            プリント(permission_list)#<クエリセット[{ 'permissions__url': '/スターク/ app01 /ユーザー/'}は、{ 'permissions__url' :「/スターク/ app01 /ロール/」}]> 
            現在のセッション中にユーザが訪れた保存 
            要求。セッション[ "permission_list ' ] = [permission.get(' permissions__url 'のための権限permission_list]を
             返す(リクエスト、レンダリング' index.htmlを' 地元の人々は())
     を返すレンダリング(リクエスト、' login.htmlと"
コードの表示

  ##ミドルウェア機能:着陸権の確認、黒と白のリスト、URLのアクセス制御

設定中間設定 
ミドルウェア= [
        ' app01.permission.permission.MyPermission ' 
]

  ###コンフィギュレーションミドルウェアC:CRM \ \ app01許可\ \ permission.py

インポートの再

から django.utils.deprecation インポートMiddlewareMixin
 から django.shortcuts インポート、リダイレクトはHttpResponse 


クラスMyPermission(MiddlewareMixin):
     DEF process一(セルフ、要求):
        訪れたURLのように、現在のユーザーを取得
        #の印刷を(request.path)#のGETのURL接尾辞
        を印刷(request.get_full_path())#接尾辞を取得し、要求パラメータが取得 
        CURRENT_PATH = request.path 

        サイトのホワイトリストを定義し、管理者によって、すべての始まりを与えられた「/admin/.*」 
        WHITE_LIST = [ " /ログイン/ ' ' /登録/ ' '/インデックス/ ' ' /admin/.* " ]
         WHITE_LISTでCURRENT_PATH場合:
        #の     復帰なし#正の決意が完璧ではないですか正で一致する
        ために URL WHITE_LIST:
            RES = re.search(URL、CURRENT_PATH)
             iF RES:
                 返すなし

        #は、ユーザーがログインしていることを確認し
        た場合 ではない(request.session.get ユーザー名):
             リターンリダイレクト(/ログイン

        チェックユーザー権限
        = request.session.get permission_list(permission_list #は、現在のURLが正規のアクセスURLの範囲内であると判断し
        、「「」
            を検討するポイント:現在のURLを正規の試合で、それが存在するかどうかよりも、それは通常の通過でなければなりません判断が存在するかどうか
            にすることによって直接決定することができない
        「」「
        のための許可permission_list:
            固定許可URL、URLの長さが一致することができない超え
            」「」、
             等:ビューのみhttp://127.0.0.1:8000 /スターク/ app01 /ユーザー/ 
                  それぞれ、それから彼は、URLに追加し試合を追加することを許可されません。
                    http://127.0.0.1:8000/stark/app01/user/add/ 
            「」 " 
            許可 = ^%の$のS %の許可 = re.search(許可、CURRENT_PATH)
             の場合RES:
                 返すなし
         リターンのHttpResponse(' 没有权限'

  ##要件:サイドバーは、ユーザーにすべての権限を表示する(通常は、クエリを表示、編集、何の意味を追加しません)

問題:どの解決方法を編集したり、URL追加されたURLのクエリURL、
ソリューションは:、リストクエリを識別するために、クエリURLを識別するために、それはフラグフィールドを追加する権限になります許可を与えることにより、追加を意味追加、編集者は述べています編集は、表現するために削除して、それを削除し
        、このフィールドを取得することにより、URLのクエリがあるかを調べるためにバックエンドをして、変数を使用する前に、レンダリング、辞書形で設定された変数のリストに追加しました

 

おすすめ

転載: www.cnblogs.com/liangzhenghong/p/11329512.html