在安业项目中主要采用了微软的treeview来按制,所以权限控制最主要的就是控制treeview上要显示的结点,
其中用到了四个表,xt_menu(菜单表),xtuser(用户表),xt_jsmx(角色明细表),xt_qxmx(权限明细表)
如图:
用户表中的user_role与角色明细中的js_bh用来确定登陆用户的角色,角色明细表中的js_bh与权限明细表中的
js_bh关联来确定该角色的权限,再根据权限明细表中的enabled与菜单表中的mnu_xh关联来确定菜单。
下面项目中所用的存储过程。
CREATE PROCEDURE ay_proc_xtmenu
@usernc varchar(20)
AS
begin
SELECT DISTINCT xt_menu.mnu_xh, xt_menu.mnu_fbm, xt_menu.mnu_name, xt_menu.mnu_url,
xt_menu.mnu_img, xt_menu.mnu_seq, xt_menu.mnu_end, xt_menu.mnu_lb
FROM xt_qxmx INNER JOIN
xt_jsmx ON xt_qxmx.js_bh = xt_jsmx.js_bh INNER JOIN
xtuser ON xt_jsmx.js_bh = xtuser.user_role INNER JOIN
xt_menu ON xt_qxmx.enabled LIKE xt_menu.mnu_xh + '%'
where xtuser.user_nc=@usernc
ORDER BY mnu_xh
end
GO
至于树的生成,可以参考《用Trewview生成树:动态的从数据库中取树结点》文章。