需要在cakePHP中拥有多个组中的用户

时间:2010-09-13 15:55:26

标签: php cakephp acl

您好我在cakephp中为我的Web应用程序尝试ACL组件。他们网站上使用ACL结构的示例在组和用户之间存在多对一关系。用户可以属于一个组,而一个组中可以有多个用户。

但我有一种情况,我需要在一个以上的组中有一些用户。为此,我不得不改变表结构,因为它会有很多对很多。所以我构建了一个名为“groups_users”的关联实体。现在我已经烘焙了所有的控制器,模型和视图。

我添加了群组和用户,而且工作正常。我还将组件添加到父类AppController中。我还使用烘焙控制台生成了ACL表ACO,ARO和AROs_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;

2 个答案:

答案 0 :(得分:1)

这可能有助于让您指向正确的方向,或者可能为您提供另一条路线。 Simple Auth Users Has And Belongs To Many Groups CakePHP

答案 1 :(得分:0)

  

我可以选择用户及其用户   小组,并提交记录必须   在技​​术上创造我的   groups_users表。

您的意思是在插入将用户分配到组的记录时吗?

除了您描述的问题外,您的应用程序是否按预期工作?

很难从您的描述中确定,但可能必须为每个用户/组合组合创建aro_aco记录。