2010-09-13 95 views
1

你好我正在嘗試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; 

回答

1

這可能會幫助你指出正確的方向或可能給你另一條路線。 Simple Auth Users Has And Belongs To Many Groups CakePHP

+0

嘿,可以將它集成到cakePHP中的ACL組件中,還是將它分開,並且它本身?這適用於授權,但它是否可以根據控制列表(如控制器和操作)控制訪問? – macha 2010-09-13 19:31:01

+0

我不相信它。我發佈了它作爲參考,讓您瞭解它們如何使用一對多,以便您可以編輯ACL以添加功能。 – Bot 2010-09-14 19:05:48

0

我可以選擇的用戶和他們的 組,並在提交記錄有 我 groups_users表在技術上創建。

是否當你插入記錄分配用戶到組?

除了您描述的問題之外,您的應用程序是否按預期工作?

從描述中很難確定,但可能需要爲每個用戶/組組合創建aro_aco記錄。

+0

Ok在常規示例中,用戶表具有額外的列「group_id」,這意味着用戶只能是一個組的一部分。我希望用戶成爲多個組的一部分。所以我有關聯表groups_users。 – macha 2010-09-13 17:15:42

+0

現在,當我去添加groups_users控制器的動作時,我得到了一個用戶和組的列表,我可以從中爲用戶分配如此等組。從技術上來說,控制器上的任何插入都應該達到默認模型,但是這次插入是在aros_acos表上進行的。 – macha 2010-09-13 17:17:33

+0

我明白你想要做什麼。 groups_users記錄是否正確插入?問題很可能在於ACL組件編寫爲期望Group [1]:[n]用戶關係。我認爲你可能需要自定義組件來做你想做的事情。 – Leo 2010-09-13 17:40:22

相關問題