代码改变世界

ThinkPHP的RBAC(二)

2011-05-07 15:41  卫佳  阅读(273)  评论(0编辑  收藏  举报

看着是不是又晕了?呵呵,没关系,我们来用一个简单的图表和简易图来像大家说明:

表Think_access:

Role_ID

Node_id

pid

level

用户组的编号

节点表

节点表中的父ID项

节点表中的等级项

注:如果用户组id和对应的节点id存在这张表中,就表示用户所在的用户组有权限进行对应的操作权限。

表Think_node

id

name

title

pid

level

节点编号,用来产生关联关系,主键,自增方便索引

项目,模块或者动作的名字(严格区分大小写)

项目或模块的备注,方便管理员认识和了解

注①

只能为1,2,3分别代表项目,模块,操作动作

注①          :

1)如果是项目名称则项目是顶级的,它上面没有父路径编号(pid),因此pid则为0;例如,网站下有一个Admin项目,它是顶级的。因此没有父路径编号(pid),此处应填0,如果它为第一次插入数据库的,它的id则为1。全字段插入数据库应为:

id

name

title

pid

level

1

Admin

Admin项目节点

0

1

2)如果某项目下有一个模块。则父路径编号(pid)则为该某块所在的项目编号(id)。例如,Admin下面有一个模块为User,它是第二个插入数据库的。因此,模块的父路径(pid)应填1。全字段插入数据库应为:

id

name

title

pid

level

2

User

User模块节点

0

2

3)如果在某模块下面有三个动作(或成员方法),分别Index(显示)、insert(插入)、delete(删除),它们三个的父路径为该模块的编号。例如User模块下有Index、insert、delete三个动作或成员方法,它们分别是第三,四,五次插入数据库的。他们的父路径编号(pid)应填2。全字段插入数据库应为:

id

name

title

pid

level

3

User

User模块下显示动作

0

2

4

Index

User模块下插入动作

0

2

5

insert

User模块下删除动作

0

2

表think_role

id

Name

组的编号(主键)

组的名字

注:此表中可以插入父路径编号(pid)产生组的包含关系。对应的父路径编号(pid)为所属组的编号(id)。

表think_user

id

username

password

用户编号(主键,int类型)

用户名(varchar类型)

密码(char类型32位)

注:id在下一张表中结合think_role产生用户与组的关联关系。建议username设为唯一的,password采用32位md5加密。

表think_role_user

group_id

User_id

组编号(主键,int类型)

用户编号(主键,int类型)

注:用户编号(user_id)对应哪一个group_idwedding jewelry wholesale,则哪个用户就属于哪一个组。可以让同一个用户对应多个组。就意味着,一个用户具有多个组的属性和操作权限。

表建完了,我们现在来看一下简易图形和他们的对应关系。




最难理解,也是最核心的数据库结构和存储结构说完了,对照着这个数据库进行插入,添加修改即可。

在下期我们将接着讲解ThinkPHP的代码或数据库插入部份。希望大家很快能领悟其中,从而在开发中更加方便和快速。

ThinkPHP RBAC(二) 

看着是不是又晕了?呵呵,没关系,我们来用一个简单的图表和简易图来像大家说明: 

Think_access:

        

Role_ID

Node_id

pid

level

用户组的编号 

节点表 

节点表中的父ID 

节点表中的等级项

注:如果用户组id和对应的节点id存在这张表中,就表示用户所在的用户组有权限进行对应的操作权限。

Think_node

id

name

title

pid

level

节点编号,用来产生关联关系,主键,自增方便索引

项目,模块或者动作的名字(严格区分大小写)

项目或模块的备注,方便管理员认识和了解

注①

只能为1,2,3分别代表项目,模块,操作动作

注①         

1)如果是项目名称则项目是顶级的,它上面没有父路径编号(pid),因此pid则为0;例如,网站下有一个Admin项目,它是顶级的。因此没有父路径编号(pid),此处应填0,如果它为第一次插入数据库的,它的id则为1。全字段插入数据库应为:

id

name

title

pid

level

1

Admin

Admin项目节点

0

1

2)如果某项目下有一个模块。则父路径编号(pid)则为该某块所在的项目编号(id)。例如,Admin下面有一个模块为User,它是第二个插入数据库的。因此,模块的父路径(pid)应填1。全字段插入数据库应为:

id

name

title

pid

level

2

User

User模块节点

0

2

3)如果在某模块下面有三个动作(或成员方法),分别Index(显示)insert(插入)、delete(删除),它们三个的父路径为该模块的编号。例如User模块下有Indexinsertdelete三个动作或成员方法,它们分别是第三,四,五次插入数据库的。他们的父路径编号(pid)应填2。全字段插入数据库应为:

id

name

title

pid

level

3

User

User模块下显示动作

0

2

4

Index

User模块下插入动作

0

2

5

insert

User模块下删除动作

0

2

think_role

id

Name

组的编号(主键)

组的名字

注:此表中可以插入父路径编号(pid)产生组的包含关系。对应的父路径编号(pid)为所属组的编号(id)

think_user

id

username

password

用户编号(主键,int类型)

用户名(varchar类型)

密码(char类型32)

注:id在下一张表中结合think_role产生用户与组的关联关系。建议username设为唯一的,password采用32md5加密。

think_role_user

group_id

User_id

组编号(主键,int类型)

用户编号(主键,int类型)

注:用户编号(user_id)对应哪一个group_idwedding jewelry wholesale,则哪个用户就属于哪一个组。可以让同一个用户对应多个组。就意味着,一个用户具有多个组的属性和操作权限。

表建完了,我们现在来看一下简易图形和他们的对应关系。



 

 

 

 

 

 

 

 

 

 

 


最难理解,也是最核心的数据库结构和存储结构说完了,对照着这个数据库进行插入,添加修改即可。

在下期我们将接着讲解ThinkPHP的代码或数据库插入部份。希望大家很快能领悟其中,从而在开发中更加方便和快速。