你好我正在嘗試Cakephp中的ACL組件用於我的Web應用程序。在他們的網站上使用他們的ACL結構的例子在組和用戶之間具有多對一的關係。用戶可以屬於一個組,而一個組可以有多個用戶。需要在CakePHP中的多個組中有一個用戶
但我有一種情況,我需要在多個組中有幾個用戶。爲此,我不得不改變表格結構,因爲它會是多對多的。所以我建立了一個名爲「groups_users」的聯合實體。現在我已經烘焙了所有的控制器,模型和視圖。
我已經添加了組和用戶,並且工作正常。我還將組件添加到父類AppController中。我還使用烘焙控制檯生成了ACL表ACOs,ARO和AROs_ACO。
所以在groups_users添加視圖,我有一個用戶和組的列表。我可以選擇用戶及其羣組,並且在提交記錄時必須在我的groups_users表中技術性地創建記錄。
但令我驚訝的是,記錄被插入到aros_acos表中,這很奇怪。我相信用戶,組和acl表之間有一些內在聯繫。我嘗試瞭解這些表之間是否存在任何外鍵級聯,但在config/schema/dbacl.sql文件中沒有提及任何外鍵。
我粘貼我的表格結構以更好地理解我的問題。
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@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 [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;
嘿,可以將它集成到cakePHP中的ACL組件中,還是將它分開,並且它本身?這適用於授權,但它是否可以根據控制列表(如控制器和操作)控制訪問? – macha 2010-09-13 19:31:01
我不相信它。我發佈了它作爲參考,讓您瞭解它們如何使用一對多,以便您可以編輯ACL以添加功能。 – Bot 2010-09-14 19:05:48