Нужно иметь пользователя в более чем одной группе в cakePHP - PullRequest
1 голос
/ 13 сентября 2010

Здравствуйте, я пробую компонент 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;

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

Это может помочь вам указать правильное направление или, возможно, дать вам другой путь. Простой пользователь Auth имеет и принадлежит ко многим группам CakePHP

0 голосов
/ 13 сентября 2010

Я могу выбрать пользователей и их группы, и при отправке должна быть технически создана запись в моей таблице groups_users.

Вы имеете в виду, когда вставляете запись, назначающую пользователяв группу?

Работает ли ваше приложение должным образом, помимо проблемы, которую вы описываете?

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

...