Здравствуйте, я пробую компонент ACL в cakephp для моего веб-приложения. Пример на их веб-сайте для использования их структуры ACL имеет отношение один к одному между группами и пользователями. Пользователь может принадлежать к одной группе, тогда как в группе может быть более одного пользователя.
Но у меня есть ситуация, когда мне нужно иметь несколько пользователей в более чем одной группе. Для этого мне пришлось изменить структуру таблицы, так как это будет много ко многим. Поэтому я создал ассоциативную сущность под названием «groups_users». Теперь я испек все контроллеры, модели и представления.
Я добавил группы и пользователей, и все работает нормально. Я также добавил компоненты в родительский класс AppController. Я также сгенерировал таблицы ACL ACO, ARO и AROs_ACO, используя консоль для выпечки.
Так что в представлении добавления групп_пользователей у меня есть список пользователей и групп. Я могу выбрать пользователей и их группы, и при отправке запись должна быть технически создана в моей таблице groups_users.
Но, к моему удивлению, записи вставляются в таблицу aros_acos, что странно. Я полагаю, что существует некоторая внутренняя связь между пользователями, группами и таблицами ACL. Я пытался понять, есть ли каскад между внешними ключами между этими таблицами, но в файле config / schema / dbacl.sql ничего не было упомянуто.
Я вставляю структуру таблицы для лучшего понимания моей проблемы.
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
CREATE SCHEMA IF NOT EXISTS `acl_cake` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `acl_cake` ;
-- -----------------------------------------------------
-- Table `acl_cake`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `acl_cake`.`users` (
`id` INT(11) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(255) NOT NULL ,
`password` CHAR(40) NOT NULL ,
`created` DATETIME NULL DEFAULT NULL ,
`modified` DATETIME NULL DEFAULT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX (`username` ASC) );
-- -----------------------------------------------------
-- Table `acl_cake`.`groups`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `acl_cake`.`groups` (
`id` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(100) NOT NULL ,
`created` DATETIME NULL DEFAULT NULL ,
`modified` DATETIME NULL DEFAULT NULL ,
PRIMARY KEY (`id`) );
-- -----------------------------------------------------
-- Table `acl_cake`.`posts`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `acl_cake`.`posts` (
`id` INT(11) NOT NULL AUTO_INCREMENT ,
`title` VARCHAR(255) NOT NULL ,
`body` TEXT NULL DEFAULT NULL ,
`created` DATETIME NULL DEFAULT NULL ,
`modified` DATETIME NULL DEFAULT NULL ,
`user_id` INT(11) NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_posts_users1` (`user_id` ASC) ,
CONSTRAINT `fk_posts_users1`
FOREIGN KEY (`user_id` )
REFERENCES `acl_cake`.`users` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION);
-- -----------------------------------------------------
-- Table `acl_cake`.`widgets`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `acl_cake`.`widgets` (
`id` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(100) NOT NULL ,
`part_no` VARCHAR(12) NULL DEFAULT NULL ,
`quantity` INT(11) NULL DEFAULT NULL ,
PRIMARY KEY (`id`) );
-- -----------------------------------------------------
-- Table `acl_cake`.`groups_users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `acl_cake`.`groups_users` (
`id` INT NOT NULL ,
`user_id` INT(11) NOT NULL ,
`group_id` INT(11) NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_permissions_users` (`user_id` ASC) ,
INDEX `fk_permissions_groups1` (`group_id` ASC) ,
CONSTRAINT `fk_permissions_users`
FOREIGN KEY (`user_id` )
REFERENCES `acl_cake`.`users` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_permissions_groups1`
FOREIGN KEY (`group_id` )
REFERENCES `acl_cake`.`groups` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;