张 佳
(黄山学院 现代教育技术中心,安徽 黄山 245041)
新闻发布类网站一般都设有新闻的分类,每条新闻发布或编辑时,都会归属某个分类。使用asp.net设计该类网站时,新闻发布/编辑页(.aspx)存放于解决方案资源管理器的文件夹中,用户是否能对该页面进行操作取决于用户所拥有的角色是否对该文件夹有访问权限。一旦角色有访问某文件夹的权限,那么该用户便拥有了访问该文件夹中页面的所有操作权限,能对新闻的发布和编辑选择所有的栏目,无疑权限过大。一般某个用户只能操作一个或几个栏目,而不是对所有的栏目都有操作权限。
用ASP.NET开发一个新闻发布类网站,设计数据表如图1[1]。
图1 栏目表与新闻表之间一对多的关系
栏目表的记录如表1。
表1 栏目表的具体记录
栏目表与新闻表是一对多的关系,一个栏目有一条或多条新闻;一条新闻只属于一个栏目。
在解决方案资源管理器中建立文件夹newsEdit,在该文件夹中建立Web窗体newsIn.aspx。如图2。
图2 新闻编辑文件夹和aspx页面
该页能加入或编辑具体的新闻,加入或编辑的新闻能选择所有的栏目。
对该网站启用并建立角色newsRo,设置该角色拥有对newsEdit文件夹的操作权限,具体设置如图3(news是网站存放文件夹,一般位于磁盘根目录下)。
图3 建立角色并对文件夹设置访问权限
建立用户userEdit如图4,并使该用户具有newsRo角色。
图4 设置用户的角色
这样,用户userEdit具有newsRo角色,而newsRo角色具有操作文件夹newsEdit及其页面newsIn.aspx的操作权限。于是用户userEdit能操作newsIn.aspx页,该用户加入或编辑的新闻能选择所有的栏目名,如图5。
图5 未细化用户对新闻栏目操作权限的逻辑图
在newsIn.aspx页面中加入或编辑新闻时,用户userEdit能操作所有栏目,导致操作权限过大,这在新闻类网页中是不合理的。合理的做法是,某个用户只能操作指定的一个或多个栏目,而不是操作所有的栏目。
建立若干个“用户组”,存放于“用户组”表中。一个用户组包含一个或多个栏目,一个栏目可以属于一个或多个用户组。所有用户组包含的栏目应包括该新闻网站所有栏目。然后将用户分配给用户组:一个用户只属于一个用户组,一个用户组可以有一个或多个用户。于是,用户便拥有它所在用户组所具有栏目的操作权限,而对该用户组不包含的栏目无权操作。这样便解决了用户对页面操作权限过大的问题,逻辑关系如图6。
图6 细化用户对新闻栏目操作权限的逻辑图
由上述可知,“用户组”与“栏目”之间是多对多的关系,在关系型数据库设计中,需要将它们分解为两个一对多的关系。可建立一个“栏目组”表,栏目表与栏目组表之间是一对多的关系;同样,用户组表与栏目组表之间也是一对多的关系。
综上所述,该新闻发布网站数据表之间有如图7所示关系。
图7 新闻类网站各表之间的关系
其中,aspnet_Users表是在建立角色和用户的时候系统自动建立的。
该存储过程(按用户名选择栏目)用在当用户加入或编辑新闻时,用户只能选择该用户所在用户组中所包含的栏目。
权限设置界面如图8。
图8 用户权限细化操作界面
首先,后台管理员选择某个用户组后,界面刷新并显示所选择的用户组当前拥有的栏目名(程序运行最开始可能没有任何栏目);然后勾选或取消勾选具体的栏目名,即给所选的用户组分配具体的栏目名;最后单击“将栏目操作权分配给用户组”按钮,即将选中的栏目名分配给了所选择的用户组。
同样,将用户分配给用户组也是先选择具体的用户组名,再分配具体的用户名,最后单击“将用户加入到用户组中”按钮即可。
通过建立用户组,细化了用户的操作权限,这也是新闻类网站应有的合理的设计。但一个用户不能归于多个用户组中,否则就违背了设计的初衷;若想让用户拥有两个及以上用户组中栏目的操作权,可再建立一个用户组,将需要的栏目划入该用户组中,再将用户归为该用户组即可。此外,若一个栏目只归属于一个用户组,则该栏目只能由该组中的用户操作;若一个栏目归属于两个及以上用户组,则该栏目下的新闻可由不同用户组中的用户操作。这样一方面限制了用户的权限,又不失操作的灵活性。
[1]苏啸,廖德伟.网站设计与制作[M].北京:中国铁道出版社,2011.