<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 訪問控制列表 ACL(Access Control Lists ACL) # 訪問控制列表 ACL(Access Control Lists ACL) Phalcon在權限方面通過 [*Phalcon\\Acl*](#) 提供了一個輕量級的 ACL(訪問控制列表). [Access Control Lists](http://en.wikipedia.org/wiki/Access_control_list) (ACL)允許系統對用戶的訪問權限進行控制,比如允許訪問某些資源而不允許訪問其它資源等。 這里我們建議開發者了解一些關于ACL的技術。 ACL有兩部分組成即角色和資源。 資源即是ACL定義的權限所依附的對象。 角色即是ACL所字義的請求者的身份,ACL決定了角色對資源的訪問權限,允許訪問或拒絕訪問。 ### 創建 ACL(Creating an ACL) 這個組件起先是設計工作在內存中的, 這樣做提供了更高的訪問速度。 [*Phalcon\\Acl*](#) 構造器的第一個參數用于設置取得ACL的方式。 下面是使用內存適配器的例子: ``` <pre class="calibre14">``` <?php use Phalcon\Acl\Adapter\Memory as AclList; $acl = new AclList(); ``` ``` 默認情況下 [*Phalcon\\Acl*](#) 允許我們訪問未定義的資源中的action,為了提高安全性, 我們設置默認訪問級別為‘拒絕’。 ``` <pre class="calibre14">``` <?php // 設置默認訪問級別為拒絕 $acl->setDefaultAction(Phalcon\Acl::DENY); ``` ``` ### 添加角色(Adding Roles to the ACL) 角色即是權限的集合體,其中定義了我們對資源的訪問權限。 例如, 我們會把一個組織內的不同的人定義為不同的角色。 The [*Phalcon\\Acl\\Role*](#)類使用一種更有組織的方式來定義角色。 這里我們創建一些角色: ``` <pre class="calibre14">``` <?php use Phalcon\Acl\Role; // 創建角色 $roleAdmins = new Role("Administrators", "Super-User role"); $roleGuests = new Role("Guests"); // 添加 "Guests" 角色到ACL $acl->addRole($roleGuests); // 添加"Designers"到ACL, 僅使用此字符串。 $acl->addRole("Designers"); ``` ``` 上面我們看到,我們可以直接使用字符串來定義角色。 ### 添加資源(Adding Resources) 資源即是訪問控制要控制的對象之一。 正常情況下在mvc中資源一般是控制器。 Phalcon中我們使用 [*Phalcon\\Acl\\Resource*](#) 來定義資源。非常重要的一點即是我們把相關的action或操作添加到資源中這樣ACL才知道控制什么資源。 ``` <pre class="calibre14">``` <?php use Phalcon\Acl\Resource; // 定義 "Customers" 資源 $customersResource = new Resource("Customers"); // 為 "customers"資源添加一組操作 $acl->addResource($customersResource, "search"); $acl->addResource($customersResource, array("create", "update")); ``` ``` ### 定義訪問控制(Defining Access Controls) 至此我們定義了角色及資源, 現在是定義ACL的時候了,即是定義角色對資源的訪問。 這個部分是極其重要的,特別是在我們設定了默認的訪問級別后。 ``` <pre class="calibre14">``` <?php // 設置角色對資源的訪問級別 $acl->allow("Guests", "Customers", "search"); $acl->allow("Guests", "Customers", "create"); $acl->deny("Guests", "Customers", "update"); ``` ``` allow()方法指定了允許角色對資源的訪問, deny()方法則反之。 ### 查詢 ACL(Querying an ACL) 一旦訪問控制表定義之后, 我們就可以通過它來檢查角色是否有訪問權限了。 ``` <pre class="calibre14">``` <?php // 查詢角色是否有訪問權限 $acl->isAllowed("Guests", "Customers", "edit"); // Returns 0 $acl->isAllowed("Guests", "Customers", "search"); // Returns 1 $acl->isAllowed("Guests", "Customers", "create"); // Returns 1 ``` ``` ### 角色繼承(Roles Inheritance) 我們可以使用 [*Phalcon\\Acl\\Role*](#) 提供的繼承機制來構造更復雜的角色。 Phalcon中的角色可以繼承來自其它角色的權限, 這樣就可以實現更巧妙的資源訪問控制。 如果要繼承權限用戶, 我們需要在添加角色函數的第二個參數中寫上要繼承的那個角色實例。 ``` <pre class="calibre14">``` <?php use Phalcon\Acl\Role; // ... // 創建角色 $roleAdmins = new Role("Administrators", "Super-User role"); $roleGuests = new Role("Guests"); // 添加 "Guests" 到 ACL $acl->addRole($roleGuests); // 使Administrators繼承Guests的訪問權限 $acl->addRole($roleAdmins, $roleGuests); ``` ``` ### 序列化 ACL 列表(Serializing ACL lists) 為了提高性能, [*Phalcon\\Acl*](#) 的實例可以被實例化到APC, session, 文本或數據庫中, 這樣開發者就不需要重復的定義acl了。 下面展示了如何去做: ``` <pre class="calibre14">``` <?php use Phalcon\Acl\Adapter\Memory as AclList; // ... // 檢查ACL數據是否存在 if (!is_file("app/security/acl.data")) { $acl = new AclList(); // ... Define roles, resources, access, etc // 保存實例化的數據到文本文件中 file_put_contents("app/security/acl.data", serialize($acl)); } else { // 返序列化 $acl = unserialize(file_get_contents("app/security/acl.data")); } // 使用ACL if ($acl->isAllowed("Guests", "Customers", "edit")) { echo "Access granted!"; } else { echo "Access denied :("; } ``` ``` ### ACL 事件(ACL Events) 如果需要的話 [*Phalcon\\Acl*](#) 可以發送事件到 [*EventsManager*](#) 。 這里我們為acl綁定事件。其中一些事件的處理結果如果返回了false則表示正在處理的操作會被中止。支持如下的事件: 事件名觸發條件能否中止操作beforeCheckAccess在權限檢查之前觸發YesafterCheckAccess在權限檢查之后觸發No下面的例子中展示了如何綁定事件到此組件: ``` <pre class="calibre14">``` <?php use Phalcon\Acl\Adapter\Memory as AclList; use Phalcon\Events\Manager as EventsManager; // ... // 創建事件管理器 $eventsManager = new EventsManager(); // 綁定事件類型為acl $eventsManager->attach("acl", function ($event, $acl) { if ($event->getType() == "beforeCheckAccess") { echo $acl->getActiveRole(), $acl->getActiveResource(), $acl->getActiveAccess(); } }); $acl = new AclList(); // Setup the $acl // ... // 綁定eventsManager到ACL組件 $acl->setEventsManager($eventManagers); ``` ``` ### 自定義適配器(Implementing your own adapters) 開發者要創建自己的擴展或已存在適配器則需要實現此 [*Phalcon\\Acl\\AdapterInterface*](#) 接口。 | - [索引](# "總目錄") - [下一頁](# "多語言支持(Multi-lingual Support)") | - [上一頁](# "Encryption/Decryption") |
                  <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>

                              哎呀哎呀视频在线观看