限与角色(5)数据库结构

好久没发文章了,实在太忙了,有时有点时间,博客园还连不上,写了一些文章也传不上来,打包上传报系统忙,

 

权限类型

表名:power

说明:存放权限类型

表结构:

字段名

数据类型

设定

说明

power_id

string

主键

权限编号

number

int

 

使用2的平方法数

remark

string

 

备注

:

sort

number

remark

read

1

读取查看

write

2

写入,保存

delete

4

删除

create

8

建立

edit

16

编辑

run

32

运行、执行

stop

64

终止

pause

128

中止

admin

256

管理

all

512

全部

none

1024

award

2048

授予

expand_1

 

对应到expand_1表的权限,如时间域

expand_2

 

对应到expand_2表的权限,如IP域

expand_3

 

对应到expand_3表的权限,如临时授权域

 

资源列表

表名:resource

说明:存放用户可访问的所有资源

表结构:

字段名

数据类型

设定

说明

resource_id

string

主键

资源编号

resource_sort

string

 

资源种类

remark

string

 

备注

:

resource_id

resource_ sort

remark

A_A

UI

A窗体,A控件

A_B

UI

A窗体,B控件

A_C

UI

A窗体,C控件

 

用户列表

表名:users

说明:存放用户信息

表结构:

字段名

数据类型

设定

说明

user_id

string

主键

用户编号

password

string

 

口令

remark

string

 

备注

:

user_id

password

remark

X

123

 

Y

123

 

Z

123

 

 

角色

表名:role

说明:存放角色信息

表结构:

字段名

数据类型

设定

说明

role_id

string

主键

角色编号

 

 

 

 

remark

string

 

备注

 

:

role_id

 

remark

role_1

 

 

role_2

 

 

role_3

 

 

 

角色对应的权限

表名:role_power

说明:存放角色信息

表结构:

字段名

数据类型

设定

说明

role_id

string

主键

 

power_id

string

 

remark

string

 

备注

:

role_id

power_id

remark

role_1

run

 

role_1

edit

 

role_2

run

 

role_3

run

 

role_1

read

 

role_3

edit

 

 

角色对应的用户

表名: role_user

说明:

表结构:

字段名

数据类型

设定

说明

role_id

string

主键

 

user_id

string

 

remark

string

 

备注

:

role_id

resource _id

remark

role_1

x

 

role_1

y

 

role_2

x

 

role_3

x

 

role_1

z

 

role_3

y

 

 

角色对应的资源

表名:role_resource

说明:

表结构:

 

字段名

数据类型

设定

说明

role_id

string

主键

 

resource_id

string

 

remark

string

 

备注

:

role_id

resource _id

remark

role_1

A_A

 

role_1

A_B

 

role_2

A_A

 

role_3

A_C

 

role_1

A_C

 

role_3

A_B

 

 

关系图




 

视图

用户可操作的资源视图

user_resource

SELECT TOP 100 PERCENT dbo.users.user_id, dbo.users.password, dbo.role_user.role_id,

      dbo.role_resource.resource_id, dbo.role_power.power_id

FROM dbo.users INNER JOIN

      dbo.role_user ON dbo.users.user_id = dbo.role_user.user_id INNER JOIN

      dbo.role_resource ON dbo.role_user.role_id = dbo.role_resource.role_id INNER JOIN

      dbo.role_power ON dbo.role_resource.role_id = dbo.role_power.role_id

ORDER BY dbo.users.user_id, dbo.role_resource.resource_id

 

存储过程

得到指定用户对资操作列表

get_userResource

--得到指定用户对资操作列表

 

create procedure get_userResource

@usname nvarchar(50),--用户名

@psw nvarchar(50),--口令

@scr nvarchar(50)='' --资源名,可以不传该参数,如果不传,将返回所有的资源

as

 

if @scr=''

   begin

      select * from user_resource where user_id=@usname and password=@psw

   end

else

    begin

      select * from user_resource where user_id=@usname and password=@psw and resource_id=@scr

 

    end

go

-- x用户的全部资源权限列表

get_userResource 'x','123'

 

go

 

-- x用户的对'A_A'资源权限列表

get_userResource 'x','123','A_A'

 

得到指定用户对指定资是否有指定的操作列权限

--得到指定用户对指定资是否有指定的操作列权限

--返回一个只有一行一列的表,true为存在,false为不存在

create procedure get_userSrcIsPw

                     @usname nvarchar(50),--用户名

                     @psw nvarchar(50),--口令

                     @scr nvarchar(50), --资源名

                     @pw nvarchar(50) --权限名

as

 

declare @temp nvarchar(5);

 

select @temp=power_id from user_resource

                      where     user_id=@usname

                            and password=@psw 

                            and resource_id=@scr

                            and power_id=@pw

 

if @temp= @pw

   begin

      select 'true' as '权限'

   end

else

    begin

      select 'false' as '权限'

 

    end

go

get_userSrcIsPw 'x','123','A_A','edit'

 我的例子没有提
 

read

1

write

2

delete

4

create

8

edit

16

run

32

stop

64

pause

128

admin

256

all

512

none

1024

award

2048


这种设记的意思,可以自已想一下(^_^)


 

posted @ 2007-01-10 20:02  WXWinter(冬)  阅读(2186)  评论(15编辑  收藏  举报