Портируйте массив PHP в схему MySQL для авторизации ACL - PullRequest
1 голос
/ 20 февраля 2012

Я работаю с классом PHP, который выполняет ACL для моего веб-приложения.Он основан на драйверах и фактически работает только с массивом конфигурации.Я хочу перенести этот массив в схему MySQL, чтобы сделать драйвер для него.Это фактический массив конфигурации:

$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 Ответ

1 голос
/ 20 февраля 2012

Как насчет этого?

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