2

我对 Yii 的 AuthManager 和用于 DB 表的架构感到困惑。

  1. AuthItem表中的类型字段只能介于 0 和 2 之间(Role=2, Task=1, Operation=0)?
  2. 您能否使用本教程中使用的博客举例说明我可以找到存储在bizrule数据字段中的内容?
  3. userid字段必须是 varchar 吗?

此模式(对于 MySQL)会产生任何冲突吗?

CREATE TABLE `AuthItem` (
  `name` varchar(60) NOT NULL,
  `type` tinyint(1) unsigned NOT NULL,
  `description` varchar(255),
  `bizrule` text,
  `data` text,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `AuthItemChild` (
  `parent` varchar(60) NOT NULL,
  `child` varchar(60) NOT NULL,
  PRIMARY KEY (`parent`,`child`),
  FOREIGN KEY (`parent`) REFERENCES `AuthItem` (`name`)
    ON DELETE CASCADE 
    ON UPDATE CASCADE,
  FOREIGN KEY (`child`) REFERENCES `AuthItem` (`name`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `AuthAssignment` (
  `itemname` varchar(60) NOT NULL,
  `userid` int(10) unsigned NOT NULL,
  `bizrule` text,
  `data` text,
  PRIMARY KEY (`itemname`,`userid`),
  FOREIGN KEY (`itemname`) REFERENCES `AuthItem` (`name`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  FOREIGN KEY (`userid`) REFERENCES `User` (`userid`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

提前致谢!

4

2 回答 2

0
  1. 是的,类型字段必须是这些值之一。

    0: operation, 1: task, 2: role
    
  2. bizrule可以是任何包含可执行 PHP 代码的字符串,该代码以分号returnsfalsetrue结尾。并且数据应该是一个包含一些序列化值的字符串,您可以通过操作bizrule中的变量来使用它们。$data

  3. userid字段可以是我认为的任何类型,但默认varchar实现来自这里

于 2012-09-11T20:14:21.977 回答
0

您只有三种不同类型的认证项;角色、任务和操作。现实情况是,它们实际上可以被同等对待,区别更多的是设计而不是实现。biz 规则用于确定用户是否具有访问权限,或者换句话说是权限的粒度。例如,用户可能有权创建用户,但只有基本用户,而不是管理员。这是 bizrules 可以给你的那种粒度。花时间设计角色和访问权限,身份验证实现将非常简单。youtube 上的这个播放列表提供了一个更好的例子。

http://www.youtube.com/watch?v=7fGUtvwofU8&list=PLdfhvjWV26rQBM9gUAPG1BnTrDGsReQSr

于 2013-09-29T22:21:30.103 回答