【问题标题】:Need to have a user in more than one groups in cakePHP需要在 cakePHP 中拥有多个组中的用户
【发布时间】: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;

【问题讨论】:

    标签: php cakephp acl


    【解决方案1】:

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

    【讨论】:

    • 嘿,这可以集成到 cakePHP 中的 ACL 组件中,还是可以单独使用?这适用于授权,但它会根据控制器和操作等控制列表来控制访问吗?
    • 我不相信它。我将其发布为您的参考,以了解他们如何使用一对多,以便您可以编辑 ACL 以添加功能。
    【解决方案2】:

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

    您的意思是当您插入一条记录时将用户分配到一个组?

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

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

    【讨论】:

    • Ok 在常规示例中,Users 表有一个额外的列“group_id”,这意味着用户只能属于一个组。我希望用户成为多个组的一部分。所以我有关联表 groups_users。
    • 现在,当我在 groups_users 控制器中添加操作时,我会得到一个用户和组列表,我可以从中将用户分配给某某组。从技术上讲,控制器上的任何插入都应该达到其默认模型,但这次插入发生在 aros_acos 表上。
    • 我明白你想要做什么。是否正确插入了 groups_users 记录?问题很可能是 ACL 组件被编写为期望 Group[1]:[n]User 关系。我认为您可能必须自定义组件以执行您想要的操作。
    • 不,记录根本没有插入到 groups_users 表中。每当我提交数据时都会出现错误,记录被插入到 aros_acos 表中,该表是 cake-php 中的 ACL 附带的。我是否必须从 cake-php 自定义原始代码才能使我的脚本正常工作??
    猜你喜欢
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多