这次做图书馆维护系统,首先要解决的问题就是角色权限动态分配,权限分配直接体现就是菜单的动态分配。在此和大家分享一下心得。
大多数系统,都有多种类型的用户,不同的用户权限不同,某一个功能,A类用户是可见的,但是B类用户没有必要或者不应该看见这个功能,这就要涉及到功能的动态分配。要解决这个问题,当然要从数据下手,在学姐的指导下,有了如下的UML设计图:
解释一下:
MemberType表是用户类型表。
SystemFunction表是系统所有功能表,记录了功能的名称和对应的页面URL,思想是一个功能即一个页面。
Tab表是菜单表,也就是顶级菜单,SystemFunction表中的功能将被归类到这个菜单中。
MemberFunction表是用户功能表,这个表负责连接MemberType表和Tab表,通过这个表可以得知何种用户有哪些菜单。
TabFunction是菜单功能表,负责连接Tab表和SystemFunction表,通过这个表可以得知何种菜单有哪些功能。
这种设计遵守了三范式设计原则,使用起来非常方便。假如我们要给某种类型的用户增加一种菜单(增加一种权限),只需要在MemberFunction表中建立一个连接即可:添加一条记录,字段值分别是该类型用户的id和对应菜单的ID。给某个菜单添加某个功能也是如此。这样一来,管理起来非常方便,只需要添加或删除MemberFunction表和TabFunction表中的记录,就可以达到灵活分配用户拥有的菜单、灵活分配菜单中的功能。
结合ASP.NET,我们还需要把这种数据库表示转换成界面表示。在D层,必须借助于下边两个存储过程:
GO
/*-----------------------------用户身份(类型)对应顶级菜单表存储过程-------------------------------*/
/*选取某种用户顶级菜单*/
CREA