基于AdminLTE 多租户权限隔离

旨在分享,整理的相对比较简单

基于AdminLTE的企业应用开发平台,封装和集成多种组件,提供前端、后端整体解决方案,使得运维WEB开发更简单

背景需求:

当前做的系统是运维自动化平台,要做到多租户的权限隔离,直白的说如果张三具有A,B,C三个功能,李四具备B,C,D功能权限,当用户张三登录时看不到D的功能菜单,当用户李四登录时,看不多A功能菜单,当前思路是用户到组,组到权限

前端页面:直接将AdminLte下的starter.html进行修改即可,下面标注几个更改的地方

  1. aside 标签

<aside>

<!-- sidebar: style can be found insidebar.less -->

<section>

<ul> 功能菜单列表

</ul>

</section>

</aside>

  1. JS代码,从db中获取数据,对sidebar做数据追加操作

<script>

$.ajax({

type:‘POST‘,

async:false,

url:‘testing‘,

success:function(data){

var $li,$menu_f_ul;

data=$.parseJSON(data);

$.each(data,function(index,item){

if(item.levelCode.length==6){

$li=$(‘<liclass="treeview"></li>‘);

var $menu_f=$(‘<ahref="#">\n‘+

‘<iclass="‘+item.icon+‘"></i><span>‘+item.name+‘</span>\n‘+

‘ <spanclass="pull-right-container">\n‘+

‘<i class="fafa-angle-left pull-right"></i>\n‘+

‘</span></a>‘);

$li.append($menu_f);

$menu_f_ul=$(‘<ulclass="treeview-menu"></ul>‘);

$li.append($menu_f_ul);

$("ul.sidebar-menu").append($li);

}

else if(item.levelCode.length==12){

$menu_s=$(‘<li><ahref="#" data-url="‘+item.url+‘"><iclass="‘+item.icon+‘"></i>‘+item.name+‘</a></li>‘);

$menu_f_ul.append($menu_s);

}

});

}

});

$(function(){

//首页默认加载,通过增加active类,对每个父附录进行展开

$("a[data-url]").click(function(evt){

loadPage($(this).data("url"));

$("ul.treeview-menu li").removeClass("active");

$(this).parent().addClass("active");

});

});

</script>

数据格式为:

[{"levelCode":"000001", "url": "", "id":"4028818a567745ec0156786cd39e000b", "name": "我的待办","icon": "fa fa-calendar-check-o"}, {"levelCode":"000001000001", "url": "TEST", "id":"402881f25681c52a015681d472ba0000", "name":"TEST", "icon": "fa fa-bicycle"},{"levelCode": "000002", "url": "","id": "402880eb56875b7f0156876338100000", "name":"CURD DEMO", "icon": "fa fa-table"},{"levelCode": "000002000001", "url":"/user/list", "id":"402880eb56875b7f01568763ac630001", "name": "用户列表-Dailog","icon": "fa fa-user"}, {"levelCode":"000002000002", "url": "/user/tab/list","id": "40288182579e398f0157a25ca29a0002", "name":"用户列表-Tab", "icon": "fa fa-male"},{"levelCode": "000002000003", "url":"/user/page/list", "id":"8a8a801b58ce0f500158ce14d2c20000", "name": "用户列表-Page","icon": "fa fa-user"}, {"levelCode":"000004", "url": "", "id":"ff80808159ea142c0159ea670fae0000", "name": "组件使用说明","icon": "fa fa-server"}, {"levelCode":"000004000001", "url": "/markdown/preview/modal","id": "ff80808159ea142c0159ea68d1e30001", "name":"窗体-modals", "icon": "fa fa-windows"},{"levelCode": "000004000002", "url":"/markdown/preview/form", "id":"402880e95a72d8a4015a738980e30000", "name": "表单-form","icon": "fa fa-edit"}, {"levelCode":"000004000003", "url": "/markdown/preview/file","id": "402880ea5aae3edf015ab1b0ec9d0017", "name":"附件上传-file", "icon": "fa fa-file-o"},{"levelCode": "000028", "url": "","id": "402880eb58d9a6d40158d9a7b21f0000", "name":"系统工具", "icon": "fa fa-wrench"},{"levelCode": "000028000001", "url":"/markdown/list", "id":"402880e958eb83230158eb85a30f0000", "name": "我的文章","icon": "fa fa-edit"}, {"levelCode":"000028000002", "url": "/markdown/edit","id": "402880eb58d9a6d40158d9a995130001", "name":"Markdown编辑器", "icon": "fa fa-pencil"},{"levelCode": "000028000003", "url":"/generator/setting", "id":"8a8a81425a1b36e9015a1b42074b0000", "name": "代码生成器","icon": "fa fa-list"}, {"levelCode":"000028000004", "url": "/generator/list","id": "8a8a81d65a3598d9015a360092e60000", "name":"代码生成器测试", "icon": "fa fa-edit"},{"levelCode": "000028000005", "url":"/job/list", "id":"402880e95a72d8a4015a738bb1990001", "name": "任务管理器","icon": "fa fa-calendar-check-o"}, {"levelCode":"000028000006", "url": "/message/list","id": "8a8a83295a83a81a015a843e397b0000", "name":"消息管理器", "icon": "fa fa-list"},{"levelCode": "000030", "url": "","id": "4028818a56d407950156d41352630000", "name":"系统管理", "icon": "fa fa-tv"},{"levelCode": "000030000001", "url":"/user/page/list", "id":"4028818a56d407950156d41435830001", "name": "用户管理","icon": "fa fa-user"}, {"levelCode":"000030000002", "url": "/dict/tree","id": "4028818a56d407950156d4160e390002", "name":"字典管理", "icon": "fa fa-book"}, {"levelCode":"000030000003", "url": "/function/tree","id": "4028818a56d407950156d41d32ab0003", "name":"功能管理", "icon": "fa fa-cog"},{"levelCode": "000030000004", "url":"/role/list", "id":"4028818a56d407950156d4ecfafa0004", "name": "角色管理","icon": "fa fa-street-view"}, {"levelCode":"000030000005", "url": "/rolefunc/list","id": "8a8a807a59634b2801596364e33d0001", "name":"角色授权", "icon": "fa fa-key"}]

前端页面效果图:


首页的代码下载、view.py及DB sql请查看github:

https://github.com/caibird1990/platform

沟通方式:[email protected]

数据参考:http://www.admineap.com/

时间: 2024-10-08 10:11:04

基于AdminLTE 多租户权限隔离的相关文章

OpenStack 企业私有云的若干需求(3):多租户和租户间隔离(multi-tenancy and isolation)

本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云(Hybrid cloud)支持 主流硬件支持和云快速交付 大规模扩展性支持 商业生态环境(包括CDN 和商业SDN控制器)支持 独立的服务,包括培训.运维等 向上扩展性(PaaS 和 SaaS 等支撑) 裸金属(Bare metal)支持 企业IT环境支持 1. 基本概念 1.1 用户

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(四)基于Shiro验证用户权限,且给用户授权

最新项目比较忙,写文章的精力就相对减少了,但看到邮箱里的几个催更,还是厚颜把剩下的文档补上. 一.修改ShiroDbRealm类,实现它的doGetAuthorizationInfo方法 package org.shiro.demo.service.realm; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.apache.commons.lang.St

Jenkins配置基于角色的项目权限管理

 本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理. 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin,介绍页面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin 1.配置插件 安装插件后,进入系统设置页面 配置如下: 2.配置权限 在系统管理页面点击Manage and Assign Ro

Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析

这里有几个概念很重要,我简单用大白话说一下;权限:就是指用户是否可以执行哪些操作.如:小张可以发帖.回帖.浏览,小红只能回帖.浏览角色:就是上面说的一组操作的集合.如:高级会员有发帖.回帖.删贴.浏览的权限,普通会员只有回帖.浏览的权限.比如小张是高级会员,那么他就可以执行发帖.回帖.删贴.浏览.而小红是普通会员,所以它就只能回帖.浏览.另外角色还可以继承,中级会员除了普通会员的回帖.浏览功能外,还可以发帖.也就是说在普通会员的基础上又增加了一个发帖的权限.在Yii2.0中 yii\rbac:

基于EasyUI Treegrid的权限管理资源列表

1. 前言 最近在开发系统权限管理相关的功能,主要包含用户管理,资源管理,角色管理,组类别管理等小的模块.之前的Web开发中也用过jQueryEasyUI插件,感觉这款插件简单易用,上手很快.以前用到的主要是Datagrid组件,这次为了区分资源的父子关系,打造更好的用户体验,遂探索一下Treegrid组件. 2.jQueryEasyUI简介 jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的U

[转]基于overlayfs的硬盘资源隔离工具troot

原文在这里:http://blog.donghao.org/tag/overlayfs/ 某些开发测试团队会有这样的需求:多个开发或测试人员在一台物理机上搭环境.装rpm包.测试等,目录很可能互相干扰.避免干扰的最直接办法当然是装虚拟机,但是如果仅仅只是想把根目录隔离一下,而不需要隔离CPU和内存,那么虚拟机方案偏重了些.所以,我们做了一个叫troot的小工具,每个人都可以自己创建一个虚根目录,然后进入这个虚根目录工作,工作起来感觉就像一个全新的跟别人互不干扰的新根目录一样.不过这个troot的

django 基于proxy实现用户权限管理

项目中经常会遇到用户权限管理的问题,django adminsite已经提供非常实用的用户权限管理机制.不过有些时候,我们希望根据相关用户属性来过滤adminsite中显示的内容.下文将结束如何实现: 原始类 假设我有这么一个问卷类,基于这个类可以实现增删改查的功能 class wenjuan(models.Model): """ 问卷 """ name=models.CharField(u'问卷名称',max_length=128) breif

基于Flask实现后台权限管理系统 - 汇总

基于Flask实现后台权限管理系统 - 导言 基于Flask实现后台权限管理系统 - 高清图 基于Flask实现后台权限管理系统 - Flask 基于Flask实现后台权限管理系统 - 表设计 基于Flask实现后台权限管理系统 - 更多内容

Asp.net 基于Cookie简易的权限判断

基于Cookie简易的权限判断代码,需要的朋友可以参考下. 写入Cookie页面,创建cookie后,设置cookie属性,并添加到Response.Cookies中读取cookie,利用cookie的名字或索引从Request.Cookies中取得改写Cookie,先创建一个同名的cookie,读取Request中同名的cookie,把读取cookie的属性值付给新的对象,加入到Response.Cookies中创建一个BasePage页面,其他的页面继承自这个页面,把权限判断的代码有单个页面