Zend Framework 2 с базой данных zfc-rbac

Существует множество обучающих руководств по запуску zfc-user и zfc-rbac в Zend Framework 2. Страницы github для zfc-user и zfc-rbac (https://github.com/ZF-Commons), и реализация действительно довольно проста (как указано во многих уроках). Я также нашел схемы SQL, которые необходимы как для zfc-user, так и для zfc-rbac (/vendor/zf-commons/zfc- [user/rbac]/data/).

Создание пользователя в базе данных легко, так как zfc-пользователь уже устанавливает это для вас (http://example.com/user). Пока все хорошо. Теперь я хочу заполнить роли, но мне не ясно, как правильно заполнять таблицы rbac. Недостаток информации об этом меня удивляет, поскольку компонент zfc-rbac является популярным модулем для Zend Framework.

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

Ниже приведен SQL для таблицы ролей (это SQL, предоставленный zfc-rbac):

CREATE TABLE `rbac_role` (
  `role_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `parent_role_id` int(11) unsigned NOT NULL,
  `role_name` varchar(32) NULL,
  PRIMARY KEY (`role_id`),
  KEY `parent_role_id` (`parent_role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

ALTER TABLE `rbac_role`
  ADD CONSTRAINT `rbac_role_ibfk_1` FOREIGN KEY (`parent_role_id`) REFERENCES `rbac_role` (`role_id`);

При наличии внешнего ключа добавление родительской роли кажется невозможным?

INSERT INTO `rbac_role` (parent_role_id, role_name) VALUES (NULL, 'admin');

В основном, мой вопрос (и я очень глуп для этого), но как выглядит вставка для родительской роли? И если оператор insert, который я представил, на самом деле правильный, всегда ли нужно удалить внешний ключ, прежде чем вставлять родительскую роль?

Ответ 1

Измените таблицу создания следующим образом:

CREATE TABLE `rbac_role` (
    `role_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `parent_role_id` int(11) unsigned NULL,
    `role_name` varchar(32) NULL,
    PRIMARY KEY (`role_id`),
    KEY `parent_role_id` (`parent_role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Обратите внимание, что parent_role_id имеет значение NULL вместо NOT NULL. Если parent_role_id NOT NULL, это означает, что он должен иметь родителя, но поскольку ссылка внешнего ключа относится к одной и той же таблице, нет возможности вставить родительскую строку!

Ответ 2

fyi: эта проблема исправлена. Версия 0.2.0 zfc-rbac позволит значение NULL как parent_role_id