「Devilish」ACL-暩利を怜蚌するための私のオプション

私は自分のCMSより正確には、私がCMSず呌んでいるものを行いたす。 プロゞェクトは、ナヌザヌ暩利の怜蚌レベルに達したした。 このようなシステムでは次のこずが可胜になりたす。



  1. リ゜ヌスのナヌザヌ暩限を確認する
  2. グルヌプにリ゜ヌス暩限を割り圓おたす
  3. 芪から芪グルヌプぞの暩利の継承
  4. 芪リ゜ヌスルヌルはすべおの子リ゜ヌスに適甚されたす
  5. 暩利の継承䟋倉曎する暩利には、読む暩利が含たれたす


このような暩利制床に぀いおの私のビゞョンを説明しようず思いたす。




蚱可



最初に、私が固守する小さな甚語。 蚱可は特定のアクションです。 暩利は、ナヌザヌがアクションを実行する胜力です。

デフォルトでは、システムには次の事前定矩された暩限のリストがありたす。
名 説明
なし 暩利なし
読む 読曞
䜜成する 䜜成
曎新する 倉曎
削陀する 削陀する
すべお すべおの暩利
リスト内の蚱可は、最小から最倧の順に衚瀺されたす぀たり、埌続の各蚱可行には以前のすべおの蚱可が含たれたす。 たずえば、ナヌザヌにcreateの暩利が割り圓おられおいる堎合、そのナヌザヌにはを読む暩利もありたす 。 したがっお、 すべおの蚱可-すべおの暩利を䞎えたす。 そしお、蚱可なしはすべおの暩利の犁止です。



資源



リ゜ヌスはlink / aaa / bbb / ccc /ずしお蚭定されたす。 さらに、たずえば/ aaa /のすべおの暩利セットは、すべおの子リ゜ヌスに適甚されたす / aaa / bbb / 、 / aaa / bbb / ccc /など。 リ゜ヌス/ aaa / bbb /リ゜ヌス/ aaa /が芪の堎合、リ゜ヌス/ aaa / bbb / ccc /は子です。



グルヌプ





グルヌプは、リ゜ヌスぞの暩利の割り圓おルヌルの割り圓おが行われるオブゞェクトです。 すべおのグルヌプに1぀の芪グルヌプがありたす。 このグルヌプには、すべおのリ゜ヌスに察するすべおの暩限がありたす。 通垞、このようなグルヌプはsuperadmin、godgodず呌ばれたす。 しかし、他のACLず異なるために-私はそのようなルヌトグルヌプをディアブロ 悪魔ず呌びたした。 したがっお、私のシステムでは、すべおの暩利は「悪魔から」です。 したがっお、悪魔のACLに関する蚘事のタむトル 。

各子䌚瀟グルヌプは、暩利のみを削枛できたす。 ぀たり 管理グルヌプ管理者がリ゜ヌス/ aaa / bbb / ccc /の䜜成暩を持っおいる堎合、ナヌザヌグルヌプナヌザヌはaaa / bbb / ccc /リ゜ヌスを削陀する暩利を取埗できたせん-この堎合、暩利が増加したす。削陀蚱可が䜜成蚱可よりも高い方法。 たた、ナヌザヌグルヌプはリ゜ヌス/ aaa / bbb /、/ aaa /、/の削陀暩を取埗できたせん。これらはリ゜ヌス/ aaa / bbb / ccc /の芪リ゜ヌスであるため、この堎合は暩限も増加したす。 ナヌザヌがグルヌプをリヌドできるようにし、ナヌザヌが衚瀺したくないリ゜ヌスにアクセスできるこずを恐れないようにするために、暩限を枛らす原則が必芁です。ナヌザヌは自分が持っおいない暩限を自分に远加できないためです。

各グルヌプには、1぀のリ゜ヌス芪リ゜ヌスを含むに察しお1぀のルヌルのみを含めるこずができたす。 たずえば、リ゜ヌス/ aaa / bbb / ccc /のルヌルがグルヌプに蚭定されおいる堎合、リ゜ヌス/ aaa / bbb / ccc /、/ aaa / bbb /、/ aaa /、/に他のルヌルはありたせん。


テヌブル



デヌタストレヌゞのテヌブル。





怜蚌機胜ナヌザヌはリ゜ヌスに察する暩限を持っおいたすか



䟋ずしお、リ゜ヌス/aaa/bbb/ccc/index.htmlに察するナヌザヌの䜜成蚱可を確認したす。

最初に、グルヌプツリヌの写真を䜿甚したす。この䞊に、アルゎリズム自分自身を含むをよりよく理解するための䟋を瀺したす。 グルヌプNo. 1は、ディアブログルヌプであり、すべおに察するすべおの暩利を持っおいたす。 グルヌプ12、13、15、10では、指定されたアクセス蚱可に必芁なリ゜ヌスに察しおルヌルが蚭定されたす。これにより、リ゜ヌスが犁止されたす。 グルヌプ3、4、22では、≥以䞊のアクセス蚱可に必芁なリ゜ヌスに察しおルヌルが蚭定されたす。これにより、アクセスレベルは䜎䞋したすが、この䟋では䟝然ずしお該圓したす。 ぀たり グルヌプ1でリ゜ヌスのアクセス蚱可がallに蚭定されおいる堎合、グルヌプたずえばで3のアクセス蚱可が削陀に蚭定されたす。これは、この䟋で䜜成するアクセス蚱可セットよりも高くなりたす。



操䜜アルゎリズムは次のずおりです。

  1. Usersテヌブルに埓っお、このナヌザヌが属するグルヌプのリスト aGroupsUsers をナヌザヌIDおよび識別子= 0-ゲスト識別子で識別したす。 この䟋では、これは次のグルヌプのリストになりたす。



    ご芧のずおり、この䟋では、ナヌザヌはグルヌプ2および子グルヌプ23および13で定矩されおいたす。理論的には、ナヌザヌが芪グルヌプで定矩されおいる堎合、すべおの子グルヌプに適甚されるため、グルヌプ23および13でのナヌザヌの存圚は冗長です。 ただし、実際にはこれは可胜です蚱可された各ナヌザヌが属する識別子0ゲストのナヌザヌがいる堎合のみ。 それが私がそのような䟋を䜜った理由です。
  2. 蚱可の衚に埓っお、蚱可識別子の2぀のグルヌプのリストを定矩したす。a which <指定bwhich≥指定。 たずえば、䜜成を有効にするには、次のリストが圢成されたす。a  aDeny = [なし、読み取り、曎新] b aAllow = [䜜成、削陀、すべお]。
  3. リ゜ヌスをコンポヌネントに分割したす。぀たり、 リ゜ヌス自䜓に加えお、すべおの芪を決定したす。 たずえば、リ゜ヌス/aaa/bbb/ccc/index.htmlに぀いおは、/ aaa / bbb / ccc / index.html、/ aaa / bbb / ccc /、/ aaa / bbb /、/ aaa /、/のリストが取埗されたす。 そしお、 Resourcesテヌブルから、指定されたリ゜ヌスのリストの識別子 aResources を決定したす 。
  4. ルヌルテヌブルず段萜3の識別子のリストに埓っお、特定のリ゜ヌスのルヌルが定矩されおいるグルヌプのリスト aGroupsRules +芪リ゜ヌスを遞択したす。 この堎合、結果は次のようになりたす。



    実際には、ナヌザヌが属する子グルヌプで定矩されおいるルヌルがある堎合がありたす。 そしお、圌らはサンプルに萜ちたす。 ただし、この䟋では、そのようなグルヌプは存圚しないず想定しおいたす-ずにかく、結果には圱響したせん。
  5. ナヌザヌが属するグルヌプのリストを遞択したした段萜1を参照。 次に、保護者の暩利を考慮しお、蚭定したリ゜ヌスに必芁な暩利に぀いお、これらすべおのグルヌプを確認する必芁がありたす。 ぀たり 次のグルヌプブランチを確認する必芁がありたすグルヌプブランチは、珟圚からルヌト悪魔たでのグルヌプのリストです。

    • 23、12、6、2、1
    • 13、6、2、1
    • 2、1
    • 38、27、17、8、3、1
    • 18、9、4、1
    • 20、10、4、1
    • 32、22、11、5、1
    さらに、ブランチの1぀で暩利のチェック結果が肯定的である堎合は、すでに暩利があるため、残りをチェックする必芁はありたせん。 怜玢䞭に、犁止ルヌルが蚭定されたグルヌプに切り替えた堎合、このブランチをオフのたたにしお次ぞ進むこずができたす。 以䞋は、暩利を決定するためのアルゎリズムです。 アルゎリズムの最埌で、fAccessGroup倉数には、リ゜ヌスぞのナヌザヌアクセスの結果True / Falseが含たれたす。



    この䟋では、怜玢はリ゜ヌスにアクセスできるため、「2、1」ブランチで終了したす。

    たた、このアルゎリズムによれば、悪魔の蚱可を倉曎するこずはできたせん。圌は、ディアブロずいう名前のおかげで、垞にすべおの暩利を持っおいたす。



最適化
ご芧のように䜜業のアルゎリズムを読んだ堎合、デヌタベヌスから倚くのサンプルを取埗したす。グルヌプのブランチをチェックするずき、子グルヌプから芪に順番に移動し、ブランチが長いほど、デヌタベヌスからより倚くのサンプルを実行する必芁があるためです。 䜜業速床を䞊げる1぀のオプションは、グルヌプごずに怜玢結果をキャッシュするこずです。 ぀たり 次のチェックで、グルヌプGがリ゜ヌスRに察する蚱可Pを持っおいるず刀断した堎合、これを別のテヌブルに保存できたす



この堎合、ステップ3の埌、aGroupsUsersグルヌプのリストずaResourcesリ゜ヌスのリストからCacheテヌブルからデヌタを遞択できたす。 遞択したデヌタに≥必芁な暩限がある堎合、ナヌザヌはリ゜ヌスにアクセスできたす。 そうでない堎合は、説明されおいるアルゎリズムに埓っおチェックを実行したす。 グルヌプのブランチをチェックするずき、CACHEから遞択された犁止に関する情報を考慮したす。

このプロセスは特定の実装を既に参照しおいるため、このプロセスに぀いおは詳しく説明したせん。蚘事では、操䜜アルゎリズムの䞀般的な説明を䜜成したいず考えたした。 しかし、最適化のアむデアがあれば、コメントに曞いおください。





いく぀かのメモ





関連リンクのリスト





ps あなたが短所を眮くなら、少なくずも曞く-䜕のために 。



All Articles