关于系统权限设计的思考

来源:互联网 发布:算法工程师怎么考 编辑:程序博客网 时间:2024/05/21 12:50

 关于系统权限设计的思考

一、什么是系统权限

管理员组(Administrators)、高权限用户组(Power Users)、普通用户组(Users)、备份操作组(Backup Operators)、文件复制组(Replicator)、来宾用户组(Guests)

这是百度了解到的系统权限分组。一个系统为什么要设计系统权限?首先,一个完整的系统应该包括信息查询,信息添加,信息修改,信息删除,其中有的还需要个人登录(密码设置,修改等等)。一个系统最重要的东西莫过于数据,如果没有数据,这个系统基本上就没什么用处了(除了聊天类系统),所以保证数据的完整可靠性就是重中之重。试想,一个系统假如有100个用户,每个用户都能够对数据进行增删改查,假如某一个用户对数据进行破坏,那谁能够保证其中数据的可靠性?没人可以!所以将对数据进行操作的权限进行控制,分给特殊的人员进行操作将有利于系统的安全。

二、怎样来设计系统权限

我刚开始思考这个问题的时候,想的比较简单。首先我在人员信息表中添加一个字段用来表示用户权限,比如“0”表示来宾用户,只能浏览系统中的内容不能进行任何操作;“1”表示普通用户,可以查看信息,增加信息,删除自己上传的信息,只能操作与自己有关的信息;“2”表示高权限用户,能够操作任何信息,比如增删改查;“3”表示系统管理员,除了具有高权限用户的权限,还具有对用户信息增删改查的操作权限。这样每当一个用户登录系统时每个页面就会首先判断用户权限,然后显示相应的操作。JSP中有一个方法:document.getElementById('123').style.display='none';(可以放在javascrpt中)

能够控制隐藏Id=“123”的控件,这样当来宾用户登录时,就把“增加”“修改”“删除”相关的控件都隐藏,反之当系统管理员登录时全部显示。在JSP页面<bady>添加一个onload();方法首先执行该JavaScript中的内容,判断用户权限然后给出相应的显示。但是这样有一个弊端,就是权限设置没有灵活性,不具有人性化。设置用户权限的时候需要程序员直接操作数据库进行设置,而且一旦设置权限就不变不利于系统以后的可维护新。假如系统需要零时增加一个权限,只让他浏览其中一个模块,那程序员就需要对所有的页面增加额外的方法,增加了开发成本浪费了资源。所以我放弃了这一设想。

在与张兴学长的交流中,了解到他们写权限的方法与我自己思考的方法有很大的差别。首先数据库中与权限有关的表有“用户表”、“角色表”、“菜单表”、“用户角色表”、“角色菜单表”,菜单表中存入的都是所有页面中URL的值(页面跳转地址);角色表中存入的是系统管理员设置的角色,例如“来宾”、“测试员”、“高级用户”;角色菜单表中存入的是每个角色显示的页面URL的值;用户角色表是为每个用户设置的角色;其中有的表格可以合并,比如用户角色表可以取代,只需要在用户表中增加一个角色字段就行,角色菜单表可以在角色表中增加一个菜单字段,这样就只需要三个表就行——“用户角色表”、“角色菜单表”、“菜单表”。

在系统中有专门设置权限的页面,可以创建角色,为每个角色分配权限,分配权限的时候是将菜单表中的URL信息按照系统等级查询出来显示在一棵树上,选取后将信息存入“角色菜单表”中,最后在给每个用户分配权限。

JSP页面中是将所有的URL写在循环语句中,通过判断用户权限,从“角色菜单表”中调取相应的项显示出来。

这个方法的好处是能动态的设置权限,而且可以在系统中处理权限问题,增加了系统的可操作性,减少了程序员的负担和系统开发开销。不用再向我第一次设想那样幼稚,那么麻烦。

0 0