【发布时间】:2010-09-13 15:55:25
【问题描述】:
您好,我正在为我的 Web 应用程序尝试 cakephp 中的 ACL 组件。他们网站上使用 ACL 结构的示例在组和用户之间具有多对一的关系。一个用户可以属于一个组,而一个组可以有多个用户。
但我有一种情况,我需要在多个组中拥有几个用户。为此,我必须更改表结构,因为它是多对多的。所以我建立了一个名为“groups_users”的关联实体。现在我已经烘焙了所有的控制器、模型和视图。
我添加了组和用户,一切正常。我还将组件添加到父类 AppController 中。我还使用烘焙控制台生成了 ACL 表 ACO、ARO 和 ARO_ACO。
所以在 groups_users 添加视图中,我有一个用户和组列表。我可以选择用户及其组,并且在提交时必须在我的 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;
【问题讨论】: