<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                策略(Policy) 控制模型(model) **安裝** ~~~ composer require casbin/casbin ~~~ 實例化 ``` require_once './vendor/autoload.php'; use Casbin\Enforcer; //$e = new Enforcer("path/to/model.conf", "path/to/policy.csv"); //分別是模型文件和策略文件 $e = new Enforcer("rbac_model.conf", "rbac_policy.csv"); ``` ## **rbac_model.conf** 訪問控制模型被抽象為基于**PERM (Policy, Effect, Request, Matcher)**的一個文件 可以通過組合可用的模型來定制您自己的訪問控制模型。 例如,您可以在一個model中獲得RBAC角色和ABAC屬性,并共享一組policy規則 ``` # 用于request的定義,它明確了`e.Enforce(...)`函數中參數的含義 //# sub, obj, act表示經典三元組: 訪問實體 (Subject),訪問資源 (Object) 和訪問方法 (Action)。 //但是, 你可以自定義你自己的請求表單, 如果不需要指定特定資源,則可以這樣定義`sub、act`, //或者如果有兩個訪問實體, 則為`sub、sub2、obj、act`。 [request_definition] r = sub, obj, act //# 對policy(策略)的定義,這里配置的規則以rbac_policy.csv的 model 配置為例 [policy_definition] # 規則(策略)1 p = sub, obj, act # 規則(策略)2 p2 = sub, act [role_definition] g = _, _ g2 = _, _ //# policy_effect是對policy生效范圍的定義, // 原語定義了當多個policy rule同時匹配訪問請求request時,該如何對多個決策結果進行集成以實現統一決策 //描述如果找到匹配的多條的授權policy,最終給出的驗證授權結果, //如下面的定義說明只要有一條匹配的授權策略其`eft`是`allow`,則最終給出的驗證授權結果就是`allow`(注意每條授權policy默認的eft就是allow) [policy_effect] // # 只有一條規則生效,其余都被拒絕的情況 更多規則查看下面的表格 e = some(where (p.eft == allow)) //e = !some(where (p.eft == deny)) //e = some(where (p.eft == allow)) && !some(where (p.eft == deny)) //e = priority(p.eft) || deny //是策略匹配器的定義。匹配器(matchers)是表達式。描述的是根據訪問請求如何找到匹配的授權policy [matchers] //下面的匹配器是最簡單的,它意味著request_definition定義的請求中的subject、object和action應該與policy_definition中定義策略規則中p規則相匹配。 //m = r.sub == p.sub && r.obj == p.obj && r.act == p.act //這里加入了role_definition定義的角色 m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act //您可以使用算術運算符,如+, -, \*, /和邏輯運算符,如&&, ||, !匹配器。 ``` ## **rbac_policy.csv**策略規則配置文件 rbac_model.conf里policy_definition定義了策略,這里我們對定義的策略進行配置 policy部分的每一行稱之為一個策略規則, 每條策略規則通常以形如`p`,`p2`的`policy type`開頭。 如果存在多個policy定義,那么我們會根據前文提到的`policy type`與具體的某條定義匹配。 上面的policy的綁定關系將會在rbac_model.conf里的matcher中使用 ``` //# alice可以讀取data1 p, alice, data1, read //# bob可以編寫data2 p, bob, data2, write p, data2_admin, data2, read p, data2_admin, data2, write g, alice, data2_admin p2, bob, write-all-objects ``` 支持的內置策略如下 | 策略規則| 含義| 例子| | --- | --- | --- | | some(where (p.eft == allow)) | allow-override | [ACL, RBAC, etc.](https://casbin.org/docs/en/supported-models#examples) | | !some(where (p.eft == deny)) | deny-override | [Deny-override](https://casbin.org/docs/en/supported-models#examples) | | some(where (p.eft == allow)) && !some(where (p.eft == deny)) | allow-and-deny | [Allow-and-deny](https://casbin.org/docs/en/supported-models#examples) | | priority(p.eft) \|\| deny | priority | [Priority](https://casbin.org/docs/en/supported-models#examples) | 在訪問發生之前, 在代碼中添加強制掛鉤: ~~~ $sub = "alice"; // 想要訪問資源的用戶。 $obj = "data1"; // 要訪問的資源。 $act = "read"; // 用戶對資源執行的操作。 if ($e->enforce($sub, $obj, $act) === true) { // 允許alice讀取data1 } else { // 拒絕請求,顯示錯誤 } ~~~ 除了靜態策略文件之外, Casbin 還為運行時的權限管理提供 API。例如, 您可以將分配給用戶的所有角色按如下所示進行: ~~~ $roles = $e->getRolesForUser("alice"); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看