2012-02-20 44 views
1

我正在使用在我的Web應用程序上執行ACL的PHP​​類。它基於驅動程序,實際上它只是與配置數組一起工作。我想將這個數組遷移到一個MySQL模式來爲它做一個驅動程序。這是實際的配置陣列:將PHP陣列移植到MySQL架構以獲得ACL授權

$config = array(

    /** 
    * Groups as id => array(name => <string>, roles => <array>) 
    */ 
    'groups' => array(
     -1 => array('name' => 'Banned', 'roles' => array('banned')), 
     0 => array('name' => 'Guests', 'roles' => array()), 
     1 => array('name' => 'Users', 'roles' => array('user')), 
     50 => array('name' => 'Moderators', 'roles' => array('user', 'moderator')), 
     100 => array('name' => 'Administrators', 'roles' => array('user', 'moderator', 'admin')), 
    ), 

    /** 
    * Roles as name => array(location => rights) 
    */ 
    'roles' => array(
     '#'   => array('website' => array('read')), // default rights 
     'banned'  => false, 
     'user'  => array('comments' => array('create', 'read')), 
     'moderator' => array('comments' => array('update', 'delete')), 
     'admin'  => array(
      'website' => array('create', 'update', 'delete'), 
      'admin' => array('create', 'read', 'update', 'delete'), 
     ), 
     'super'  => true, 
    ), 

); 

這是我一直在想:

MySQL schema

這讓我對現有的組關聯的角色,所以我已經解決的第一件事。我不知道如何添加的是每個角色的位置和權利。顯然,它將轉到與role_id相關的單獨表格中,但重現以下內容的最佳方法是什麼?array('comments' => array('update', 'delete'))

最後一件事,如果一個角色有一個布爾值(比如角色被禁或超級角色),這意味着全部爲真或全部爲假。這可能更適合角色。沒有?

預先感謝您!

回答

1

這個怎麼樣?

roles_has_access 
----- 
role_id FK 
location_id FK 
right_id FK 

locations 
----- 
id PK 
name 
-- ? 
-- whatever resources/locations you have here (website, admin, comments) 

rights 
----- 
id PK 
name 
-- `CREATE`, `UPDATE`, `DELETE`, `READ` etc.