RBAC (Role-Based Access Control)基于角色的访问控制

/*用户表*/
CREATE TABLE IF NOT EXISTS `cms_user`(
 id int auto_increment primary key,
 name varchar(255) not null ,
 password char(32)
)ENGINE=MyISAM DEFAULT CHARSET=UTF8 ;

INSERT INTO cms_user (id,name,password) VALUES (1,'admin',md5('admin'));

/*角色*/
CREATE TABLE IF NOT EXISTS `cms_role`(
 id int auto_increment primary key,
 name varchar(255) not null,   -- 职员、经理、老板
 remark varchar(255),
 system INT DEFAULT 0     -- 是否系统角色(系统角色不允许删除)
)ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=UTF8 ;

insert into cms_role (id,name,remark,system) values (1,'超级管理员','拥有全部权限',1);

/*用户角色关系*/
CREATE TABLE IF NOT EXISTS `cms_user_role`(
 id int auto_increment primary key,
 user_id int not null,
 role_id int not null
) ENGINE=MyISAM  DEFAULT CHARSET=UTF8;

INSERT INTO cms_user_role (user_id,role_id) VALUES (1,1);

/*节点*/
CREATE TABLE IF NOT EXISTS `cms_node` (
  `id` int AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(255) NOT NULL,    /*名称(控制器名或动作名 )*/
  `title` varchar(255) ,      /*标题*/
  `pid` int default 0,       /*父ID*/
  `path` varchar(255) DEFAULT '',    /*路径,如 User/add  */
  `remark` text
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=UTF8;

/*访问权限表*/
CREATE TABLE IF NOT EXISTS `cms_access` (
  `id` int AUTO_INCREMENT PRIMARY KEY,
  `role_id` int  NOT NULL,
  `node_id` int NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=UTF8;


 

rbac一共5个表,同过mvc模式的controller和action的控制来进行权限的设定.

然而有了角色划分之后,能够对节点进行综合的操作.这样对赋予全线的对象有了更好的设置.

posted @ 2011-07-29 20:42  午时的海  阅读(277)  评论(0编辑  收藏  举报