2012-11-18 25 views
5

Tôi đã theo dõi this guide để tải cấu hình trình đơn của tôi và tôi nghĩ rằng đó là cách rất tốt đẹp và sạch sẽ để tải trình đơn.Một cách dễ dàng để tải ACL trong Zend Framework 2?

Câu hỏi của tôi rất đơn giản, có cách nào để tải cấu hình ACL của bạn trên cùng một cách với mảng cấu hình và một số loại nhà máy không?

Nếu không có, làm thế nào để tôi tải cấu hình ACL và sử dụng với menu đó một cách dễ dàng?

Cảm ơn!

Edit: Đây là một bài viết trên blog rất tốt về lý do tại sao các module sử dụng mà đã được thực hiện và không làm của riêng bạn, http://hounddog.github.com/blog/there-is-a-module-for-that/

Trả lời

5

ZF2 chứa ACL và cũng RBAC (vai trò dựa ACL - có thể là trong ZF2. 1), nhưng để đặt nó vào vị trí, dễ dàng hơn là sử dụng mô-đun mà bạn có thể cắm vào ứng dụng của bạn. BjyAuthorize dường như với tôi một chút cồng kềnh, bạn phải sử dụng mô-đun ZfcUser. Tôi thích ZfcRbac, các quy tắc ACL dựa trên vai trò người dùng (nhóm) và quyền truy cập của họ vào bộ điều khiển, hành động hoặc tuyến đường. Cấu hình được lưu trữ trong một tập tin cấu hình, thực sự dễ thực hiện.

+0

Phải, nó tất cả đều cảm thấy giống như việc thêm quá nhiều mã cho một thứ dễ dàng như vậy trong ZF1. Tôi đoán tôi sẽ phải sử dụng các mô-đun như thế này để làm cho nó. – Rickard

5

Nhiều khả năng có một số cách để làm điều đó, nhưng tôi thích để làm điều đó trong getViewHelperConfig() của ứng dụng của Module.php (ở đây tôi sử dụng BjyAuthorize module để đơn giản hóa công việc với ACL, và đặc biệt là nó cho phép để thiết lập quy tắc ACL trong tập tin cấu hình module.bjyauthorize.global.php)

public function getViewHelperConfig() 
{ 
    return array(
     'factories' => array(
      'navigation' => function($sm) { 
       $auth = $sm->getServiceLocator()->get('BjyAuthorize\Service\Authorize'); 
       $role = $auth->getIdentityProvider()->getIdentityRoles(); 
       if (is_array($role)) 
        $role = $role[0]; 

       $navigation = $sm->get('Zend\View\Helper\Navigation'); 
       $navigation->setAcl($auth->getAcl())->setRole($role); 

       return $navigation; 
      } 
     ) 
    ); 
} 
+2

Tôi sử dụng một cái gì đó như [this] (http://blog.hackix.com/2009/12/zend_acl-zend_navigation/) trong ZF1, rất đơn giản và rõ ràng. Tôi thấy nó lạ mà tôi không thể tìm thấy một cái gì đó đơn giản cho ZF2. Tất cả các mô-đun này cảm thấy cách phức tạp. – Rickard

+0

Cách đó cũng có thể xảy ra ('Zend \ Permissions \ Acl \ Acl' gần giống với' Zend_Acl'), và 'BjyAuthorize' cho phép viết ít mã hơn để thêm Acl vào dự án. Có vẻ như không có hướng dẫn toàn diện về kết hợp Acl, Xác thực, Điều hướng, v.v. Tôi đã googled chỉ: http://p0l0.binware.org/index.php/2012/02/18/zend-framework -2-authentication-acl-using-eventmanager/ https://samsonasik.wordpress.com/2012/08/23/zend-framework-2-controllerpluginmanager-append-controller-pluginto-all-controller/ –

1

Bạn nói đúng, không có giải pháp hoàn toàn mới nhất. Bạn phải xây dựng một số cầu nối giữa các mô-đun.

Một cách dễ dàng để tích hợp BjyAuthorize đang sử dụng ** Zend Navigation ** s phương pháp mặc định như mô tả của Rob Allen: Integrating BjyAuthorize with ZendNavigation

$sm = $e->getApplication()->getServiceManager(); 

    // Add ACL information to the Navigation view helper 
    $authorize = $sm->get('BjyAuthorizeServiceAuthorize'); 
    $acl = $authorize->getAcl(); 
    $role = $authorize->getIdentity(); 
    ZendViewHelperNavigation::setDefaultAcl($acl); 
    ZendViewHelperNavigation::setDefaultRole($role); 

Bạn cũng có thể sử dụng ZfcRbac và sử dụng một người biết lắng nghe để làm cho nó hoạt động với Điều hướng Zend.

Do đây là rất nhiều mã chỉ đơn giản là tôi đăng các liên kết ở đây: Check Zend Navigation page permissions with ZfcRbac – Webdevilopers Blog

3

Chơi với cấu trúc này. nhận vai trò và tài nguyên từ cơ sở dữ liệu và lưu nó trong phiên làm việc hoặc bất kỳ bộ nhớ đệm nào.

Play with This structure

+0

Trong trường hợp của tôi, tôi đặt role_id trong tabel người dùng, bởi vì chưa bao giờ tôi chưa bao giờ có trường hợp cho vai trò người dùng bảng có liên quan ... – tasmaniski

1

Tôi vừa tạo một module ACL tạo ra một dịch vụ phân tích cú pháp ACL các tuyến đường.

Để quản lý quyền kiểm soát truy cập vào ứng dụng của bạn, bạn chỉ cần xác định vai trò và thêm khóa mới 'vai trò' trong mọi tuyến đường. Nếu bạn không xác định khóa đó hoặc mảng của nó là rỗng, thì tuyến đường sẽ trở thành công khai. Nó cũng hoạt động với các tuyến đường trẻ em.

Như một ví dụ:

array(
    'router' => array(
     'routes' => array(
      'user\users\view' => array(
       'type'    => 'Segment', 
       'options'   => array(
        'route'   => '/admin/users/view/id/:id/', 
        'constraints' => array(
         'id' => '[0-9]+', 
        ), 
        'defaults' => array(
         'controller' => 'User\Controller\Users', 
         'action'  => 'view', 
         'roles'  => ['admin', 'user'], 
        ), 
       ), 
      ), 
     ), 
    ), 
); 

Các module có thể được cài đặt thông qua nhà soạn nhạc và nó bây giờ được liệt kê trong kho module zend: http://zfmodules.com/itrascastro/TrascastroACL

Bạn có thể nhận được thông tin chi tiết hơn về việc sử dụng và cài đặt từ của tôi blog: http://www.ismaeltrascastro.com/acl-module-zend-framework/

Các vấn đề liên quan