2015-08-06 2 views
0

Я надеюсь получить некоторые идеи или помочь в реализации ACL, чтобы установить, какие пользователи имеют возможность зрения, редактировать, создайте и удалите в моем приложении PHP/MySQL.структура ACL, чтобы разрешения по умолчанию и 2-й набор разрешений на более-ездить по умолчанию

Ниже основной модуль ядра/разделы моего приложения, которые все позволяют мне установить уровень разрешений для каждого пользователя для каждого раздела, чтобы определить, что они могут и не могут сделать ...

Projects (view | edit | Create | Delete) 
Project Tasks (view | edit [edit includes task title, description] | Create | Delete) 

Project Task Assigned User (edit) 
Project Task Due Date (edit) 
Project Task Tags (edit) 
Project Task Milestone (edit) 

Project Tags (view | edit | Create | Delete) 
Project Milestones (view | edit | Create | Delete) 
Project KanBan Board (view) 
Project Gantt Charts (view) 
Project Wiki (view | edit | Create | Delete) 
Project Stats (view | edit | Create | Delete) 
Project Files (view | edit | Create | Delete) 

страница настроек для установки разрешений на каждый пользователь для каждого раздела будет как этим образом ...

enter image description here


что соответствует записи базы данных MySQL для каждого ящика что-то вроде этого ...

enter image description here


Где мне нужна помощь в настройке его так, что по умолчанию, когда новый рекорд в одном из этого раздела/модуля, а также созданных новых пользователей, у них будут определенные разрешения по умолчанию.

Например, по умолчанию все пользователи будут автоматически иметь разрешения на просмотр для всех модулей.

Тогда на другой странице будут установлены настройки для каждого пользователя на каждое разрешение модуля, которое затем перевернуло бы разрешения по умолчанию.

Так что я не уверен в том, как в основном иметь 2 набора разрешений и объединить их и позволить 2-му набору перевернуться первым.

Первый набор - это разрешения по умолчанию для всех пользователей на всех модулях. Возможно, все пользователи по умолчанию могут просматривать все модули, но не могут редактировать любые модули или удалять и записывать.

Второй набор разрешений - это то, где он переопределяет 1-й набор для каждого пользователя в модуле. Поэтому, если все пользователи не могут удалить записи, этот набор может позволить 5 пользователям удалять записи.

Мне нужна помощь во всем смешивании/слиянии этих двух наборов, позволяя чрезмерно ездить на PHP.

Любые идеи, как я мог бы сделать эту работу?

Как я вижу, изображение настроек разрешения, показанное ниже, будет существовать на 2 страницах. 1, чтобы обрабатывать глобальные/стандартные разрешения, а вторая страница настроек - это место, где установлены ограничения перенаправления.


Моя теория для решения/как это работает

Я думаю, что это может иметь 2 PHP Массивы.

Default Permissions Array - имеет ключ/значение для каждого модуля/сущности, которые мы устанавливаем разрешающими. Ключ - это имя модуля. Значение Разрешения для этого модуля, которые применяются ко всем пользователям.

$defaultPermissionsArray = array(
    'project' => 'view', 
    'project_task' => 'view', 
    'project_milestones' => 'view', 
    //... more module permissions 
); 

Разрешение Массив - Также есть массив ключ/значение с каждым модулем. Затем он имеет значение разрешений для текущего зарегистрированного пользователя, у которого есть тот же ключ имя в качестве массива разрешений по умолчанию для этого модуля, и это значение превысит разрешение по умолчанию для этого пользователя на этом конкретном модуле.

// This user would have permission over-ride from default permissions allowing them to edit projects and milestones 
$currentUserPermissionsArray = array(
    'project' => 'edit', 
    'project_task' => 'view', 
    'project_milestones' => 'edit', 
    //... more module permissions 
); 

ответ

0

Я придумал базовое решение. Раньше у меня было то, что в PHP array_merge() добавлены дублирующие соответствующие ключи в качестве элемента детского массива. NOw Я вижу, что на самом деле работает, поэтому отправляю свое решение, возможно, поможет кому-нибудь когда-нибудь или мне самому.

Я по-прежнему открыт для идей по улучшению.

$defaultPermissionsArray = array(
    'test' => 'view', 
    'project' => 'view', 
    'project_task' => 'view', 
    'project_milestones' => 'view', 
    //... more module permissions 
); 
$currentUserPermissionsArray = array(
    'project' => 'edit', 
    'project_task' => 'view', 
    'project_milestones' => 'edit', 
    //... more module permissions 
); 


$mergedPermissions = array_merge(
    $defaultPermissionsArray, 
    $currentUserPermissionsArray 
); 

Результат

Права доступа пользователя сливаться с основными правами по умолчанию и более-ездить модули с правами пользователя для этого раздела ...

Когда приложение загружает, пользователь имеет только вид разрешения для всех модулей. После того, как этот код запущен, они получают Редактировать разрешения на 2 модуля ...

Array 
(
    [test] => view 
    [project] => edit 
    [project_task] => view 
    [project_milestones] => edit 
)