操作权限,数据权限的解决方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作权限,数据权限的解决方案相关的知识,希望对你有一定的参考价值。

ERP系统常见的问题:操作权限、数据权限的解决方案

 1、页面:通过权限控制某个页面是否显示

 2、按钮:通过权限控制某个页面上的按钮是否显示

 3、方法:通过权限控制某个方法是否能够访问

 4、数据行:通过权限控制某个用户只能看到几行数据

后台设置权限

 1、操作权限:添加计划、修改计划、搜索计划权限

 2、数据权限:本人、本部门、所有

技术分享

实现设置

 1、页面:通过请求查询用户有哪些权限-有哪些模块

 

function loadMenu(){
	$.ajax({
		url : "",
		type : "post",
		dataType : "jsonp",
		jsonp: "jsonpCallback",
		success : function(result) {
			
			var lefthtml="<li><a href=‘‘><i class=‘fa fa-tachometer fa-fw‘></i> <span class=‘menu-text‘>首页</span></a>	</li>";
			var category="";
			var i=0;
			$(result.leftModule).each(function(){ 
				if(this.categoryName!=category){
					if(i!=0){
						lefthtml=lefthtml+"</ul></li>";
					}
					lefthtml=lefthtml+	"<li class=‘has-sub‘>";
					lefthtml=lefthtml+	"<a href=‘javascript:;‘ class=‘‘>";
					if(this.categoryName=="客源管理"){
						lefthtml=lefthtml+	"<i class=‘fa fa-user fa-fw‘></i> <span class=‘menu-text‘>"+this.categoryName+"</span>";
					}else if(this.categoryName=="房源管理"){
						lefthtml=lefthtml+	"<i class=‘fa fa-home fa-fw‘></i> <span class=‘menu-text‘>"+this.categoryName+"</span>";
					}else if(this.categoryName=="我的首页"){
						lefthtml=lefthtml+	"<i class=‘fa fa-bookmark-o fa-fw‘></i> <span class=‘menu-text‘>"+this.categoryName+"</span>";
					}else if(this.categoryName=="签约管理"){
						lefthtml=lefthtml+	"<i class=‘fa fa-edit fa-fw‘></i> <span class=‘menu-text‘>"+this.categoryName+"</span>";
					}else if(this.categoryName=="文档公告管理"){
						lefthtml=lefthtml+	"<i class=‘fa fa-folder-open fa-fw‘></i> <span class=‘menu-text‘>"+this.categoryName+"</span>";
					}else if(this.categoryName=="跟进管理"){
						lefthtml=lefthtml+	"<i class=‘fa fa-hand-o-right fa-fw‘></i> <span class=‘menu-text‘>"+this.categoryName+"</span>";
					}else{
						lefthtml=lefthtml+	"<i class=‘fa fa-bookmark-o fa-fw‘></i> <span class=‘menu-text‘>"+this.categoryName+"</span>";
					}
					lefthtml=lefthtml+	"<span class=‘arrow‘></span>";
					lefthtml=lefthtml+	"</a>";
					lefthtml=lefthtml+	"<ul class=‘sub‘>";
					lefthtml=lefthtml+	"<li><a class=‘‘ href=‘"+this.link+"‘><span class=‘sub-menu-text‘>"+this.moduleName+"</span></a></li>";	 
					category=this.categoryName;
				}else{
					lefthtml=lefthtml+	"<li><a class=‘‘ href=‘"+this.link+"‘><span class=‘sub-menu-text‘>"+this.moduleName+"</span></a></li>";	 
				}
				if(i==result.leftModule.length-1){
					lefthtml=lefthtml+"</ul></li>";
				}
				i++;
				});
			$("#leftMenu").html(lefthtml);
		},
		error : function(err) {
		}
	});

   2、按钮 跟进登录人查询该用户有哪些权限码,在每个按钮的设置auth-code="shs_pair"属性

  

function valideAction(){
	$.ajax({
		url :"",
		type:"post",
		data: {actionCookies:$.cookie(‘actionCookie‘)},
		dataType: "jsonp",
		jsonp:"jsonpCallback",
		success :function(result){
			var authCodeArray= new Array();
			$(result).each(function(){ 
				authCodeArray.push(this.actionCode);
     	});
            $("[auth-code]").each(function(){
            	var auth_code=$(this).attr("auth-code");
            	if($.inArray(auth_code, authCodeArray)==-1){
            		 $(this).remove();
            	}
			 });
		}
	});
	
	
}

 3、方法 通过权限拦截器

 

public String intercept(ActionInvocation invocation) throws Exception {
		ActionContext actionContext = invocation.getInvocationContext();
		HttpServletRequest request = (HttpServletRequest) actionContext
				.get(StrutsStatics.HTTP_REQUEST);
		HttpServletResponse response = (HttpServletResponse) actionContext
				.get(StrutsStatics.HTTP_RESPONSE);
		ActionProxy actionProxy = invocation.getProxy();
		String methodName = actionProxy.getMethod();
		if (StringUtils.isBlank(methodName)) {
			methodName = "execute";
		}
		Class aClass = actionProxy.getAction().getClass();
		Method method = aClass.getMethod(methodName);
		PermissionsCode annotation = method
				.getAnnotation(PermissionsCode.class);
		String pin = (String) ActionContext.getContext().get(SystemDict.ERP_PIN);
	   /* String actionCookie=	cookieUtil.getCookieValue(cookieKeyName);
	    String actionJson= SecurityUtil.decrypt(actionCookie,cookieEncrypt.get("desPrefix"));*/
		LOG.info("登录人pin----------------"+pin);
		if (pin!=null&&!pin.equals(adminPin)) {
			/*List<Map<String,Object>> listPermissions=null;
			if(actionJson!=null){
				listPermissions= JsonUtil.fromJson(actionJson,List.class,Map.class);
			}*/
			List<ActionResult> actionlist=actionRpc.getActionList(pin);
			if (annotation != null && StringUtils.isNotBlank(annotation.code())) {
				String code = annotation.code();
				if(actionlist!=null && actionlist.size()!=0){
					for(ActionResult action : actionlist){
						if(code.equals(action.getActionCode())){
							//如果正确则继续执行
							this.setScopeContext(action.getScope());
							return invocation.invoke();
						}
					}
				}
			} else {
				//如果没有权限码则跳过
				return invocation.invoke();
			}
		} else {
			//如果是admin跳过权限码
			return invocation.invoke();
		}
		//跳转错误页面
		this.redirect(request, response);
		return null;
	}

4、数据行:首先用户有这个权限,同时获取出该权限的权限范围(本人、本部门、所有)

 根据用户的权限范围查询数据行

以上是关于操作权限,数据权限的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

操作权限,数据权限的解决方案

JS+JavaBean判断管理员增删改的操作权限

在按下允许按钮获取运行时权限时,它不是在调用操作方法吗?

教程4 - 验证和权限

gitlab 权限说明

Django REST框架--认证和权限