引言
在前几天师哥找到我们让我们给项目加上权限控制,当时在我们印象中权限是一个非
常神圣的系统,它应该是独立在其他系统之外单又控制着其他系统的一个东西,在和师
哥交流的过程中,需求这样的:我们不需要一个非常精细的权限控制,我们首先做一个
比较简单的就可以,但是需要将这个权限做活,不能像我们机房收费系统里面那样死
板,别的什么要求都没有,这就是我们接触权限的前提,所以自己就用了大概3天的时间
开始查资料并且实现了一个比较简单的权限管理功能。
简介
权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问
自己被授权的资源,不多不少。
在大家的概念中也许存在着这样一种错误的认识,就是
将我们的“用户身份验证”,“密码加密”“系统管理”等概念误认为这就是我们说的
权限管理。但是这些问题根本就不属于权限管理的范畴。
用户身份认证:是要解决这样的问题:用户告诉系统“我是谁”,系统就问用户凭什么
证明你就是“谁”呢?对于采用用户名、密码验证的系统,那么就是出示密码。当用户
名和密码匹配,则证明当前用户是谁;对于采用指纹等系统,则出示指纹;对于硬件Key
等刷卡系统,则需要刷卡。
密码加密:是隶属用户身份认证领域,不属于权限管理范畴。
系统管理:一般是系统的一个模块。而且该模块一般还含有权限管理子模块。因此,很
多人误认为权限管理系统只是系统的一个小小的子模块。系统管理里面的权限管理模
块,只是一个操作界面,让企业IT管理员能够设置角色等安全策略。系统背后还有很多
权限验证逻辑,这些都并不属于该模块。总体来说,该模块相当于给权限管理模块提供
了一些数据,比如:张三是人力资源经理等。
实现方法
基于MVC框架实现权限控制大概有这么几种思路:“用户身份验证”、“控制器方法权
限控制”、“界面元素权限控制”这三种方式可以为Web开发框架本身提供了很好用户访
问控制和权限控制,使得用户界面呈现菜单、Web界面的按钮和内容、Action的提交控
制,均能在总体权限功能分配和控制之下。
【用户身份验证】
注:这里的用户身份验证并不是简单的验证用户名和密码是否正确,而是在这个基
础上获取用户的权限信息,从而达到权限控制的目的。
这种方法可以实现比较粗的权限控制,在我们这个系统中我就采用了这种方法,下面
就和大家分享一下:
业务逻辑:在用户登录系统的时候获取用户的权限级别(一般用户,操作员等),然
后根据用户级别获取到此用户级别可以操作的功能项,然后根据可以操作的功能项来动
态的加载和移除功能菜单。下面给大家分享一下动态加载和移除菜单的js代码
//基本配置 0——权限管理,3——投标管理,4——用户管理,5——招标文件管理,6——专家管理
//7——签到
//动态的移除DIV
var bb = new Array();
bb= ['投标管理', '用户管理', '招标文件管理', '专家管理', '签到'];
function IsShow(i) {
var container = document.getElementById("aa");
if (container.childNodes.length > 0) {
var childNodes = container.childNodes;
while (childNodes[i].nodeType == 3) {
container.removeChild(container.childNodes[i]);
}
container.removeChild(container.childNodes[i]);
}
}
$(document).ready(function () {
//动态控制权限配配置菜单是否可见
$.post('/Role/GetRoleInfo', {}, function (result) {
if (result != "超级管理员") {
IsShow(0);
}
});
$.post('/Role/getOperateContentByRoleName', {}, function (result) {
//var bb = new Array();
//bb = ['投标管理', '用户管理', '招标文件管理', '专家管理', '签到'];
var tempOperateContent = result.split(",");
//alert(tempOperateContent);
for (var j = 0; j < 5; j++) {
var m = $.inArray(bb[j], tempOperateContent);
if (m==-1) {
IsShow(j+3);
}
}
});
});
这样就可以基本实现了一个简单的权限控制,但是这样的权限控制是不够的,因为这样
我们只是在前台控制了我们的权限,不知道大家有没有想过这个问题,就是如果我们没
有经过登录界面而是直接获取了主界面的URL地址,这样我们的前台界面控制就没有作用
了,所以说我们需要前台和后台的结合,这时候我们就用到了第二种方法和第三中方
法。后面的这两种方法会在接下来的博客中分享。
小结
在这个项目中自己接触到了很多新的东西,但是自己都不是很好的了解他们,现在只是
达到了会用的阶段,但是里面很多的东西都是比较陌生的,这样就导致了自己下代码调
错的时候比较盲目,因为我们不能很好的明白里面的运行就机制,所以在接下来的时间
了需要巩固一下基础知识,让自己接触到的比较新的知识变为自己熟悉的知识。