数据库表的设计:

 

关键流程思考:

权限在SSH系统中应该表现为什么东西?

小胖这个用户登陆:
1,检查用户名和密码;
2,检查通过;
  1),得到小胖这个用户的对应的所有的角色:R1
  2),根据所有的角色,得到小胖所有的权限信息:P5,P6,P7,P8
  3),把小胖所有的权限的expression放到一个set中;
  [com.ssh.mvc.RoleAction:execute,com.ssh.mvc.RoleAction:edit,com.ssh.mvc.RoleAction:delete,com.ssh.mvc.RoleAction:save]
3,把小胖这个对象和他的权限列表放到session中;

小胖操作系统:
1,点角色管理;
2,请求被权限检查拦截器拦截到了(PermissionCheckInterceptor.intercepte);
  1),得到当次请求的action和方法;
  2),判断,当前的这个方法是否是需要一个权限的;
  3),如果当前方法不需要权限,直接放行;
  4),如果当前方法需要权限,
    1),把当前请求的method变成com.ssh.mvc.RoleAction:execute一个表达式;
    2),在当前用户的permissionset中去看是否有这个表达式;
    3),如果有,放行;
    4),如果没有,直接导向到没有权限那个页面;

怎么标记一个权限?
1,我们创建一个annotation
@RequiredPermission{
String value();//这个权限的名称;
}
2,自动加载系统权限(PermissionServiceImpl);
  1),让PermissionServiceImpl注入ApplicationContext;
  2),调用ApplicationContext.getBeansOfType(BaseAction.class) 得到所有的Action实例;
  3),遍历这些Action实例,得到类型和所有的方法;
    1),判断如果方法上有@RequiredPermission标签;
    2),得到标签,Permission p=new Permission();
    3),permission.setName(RequiredPermission.value());
    4),permission.setExpresssion(通过方法拼出来);
    5),保存这个permission;

RoleAction{
@RequiredPermission("角色列表")
String execute(){
//com.ssh.mvc.RoleAction:execute
}
@RequiredPermission("编辑角色")
String edit(){
//com.ssh.mvc.RoleAction:edit
}
@RequiredPermission("删除角色")
String delete(){
//com.ssh.mvc.RoleAction:delete
}
@RequiredPermission("添加角色")
String save(){
//com.ssh.mvc.RoleAction:save
}
}

高级查询+分页:

PageResult:给前台显示的;

1,总的条数;
2,当前页的数据;
3,当前是第几页;
4,每页多少条;

效果:共有 X条记录 当前第X/X页 首页 上一页 下一页 尾页

共有多少页?
Math.max((totalCount+pageSize-1)/pageSize,1);

首页?
1
上一页?
Math.max(currentPage-1,1);
下一页?
Math.min(currentPage+1,totalPage());
尾页?
totalPage();

 QueryObject:用来包装查询和分页信息;

pageSize
currentPage
List<String> conditions;
List<Object> parmas;
private boolean isInit; abstract void customerQuery();
void addCondition(String condition,Object..params){
this.conditions.add(condition);
this.parmas.addAll(Arrays.asList(parmas));
} private void init(){
if(!isInit){
customerQuery();
isInit=true;
}
} String getQuery(){
init();
//把所有的condition拼成WHERE语句;
} List<Object> getParams(){
init();
//返回所有的参数值;
}

分页查询:
在我们的dao里面;

PageResult query(QueryObject qo){
//首先查询总共的条数;
String totalCountHQL="SELECT e FROM Employee e"+qo.getQuery();
Query query=session.createQuery(totalCountHQL);
//设置查询查询
qo.getParams();//遍历参数,设置值;
//如果条数>0
//查询当前页的数据;
qo.getParams();//遍历参数,设置值;
qo.setFirstResult();
qo.setMaxResult();
//用当前页的数据和QO中相关信息包装成一个PageResult对象;
//如果条数==0,返回一个空的PageResult对象
}

权限系统设计-day01的更多相关文章

  1. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(四)授权代码维护

    一.前言 权限系统设计中,授权代码是用来控制数据访问权限的.授权代码说白了只是一树型结构的数据,没有什么其它的业务意义.那么这个页面的功能也就非常简单授权代码维护:新增.修改.删除授权代码数据. 二. ...

  2. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(三)图形化机构树

    一.前言 组织机构是国内管理系统中很重要的一个概念,以前我们基本都是采用数据列表的形式展现,最多只是采用树形列表展现.虽然够用,但是如果能做成图形化当然是最好不过了.这里我不用任何图形控件,就用最原始 ...

  3. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(二)菜单导航

    一.前言 上篇博客中已经总体的说了一下权限系统的思路和表结构设计,那接下来我们就要进入正文了,先从菜单导航这个功能开始. 二.实现 这个页面基本不用什么需求分析了,大家都很明白,不过在这个页面要多维护 ...

  4. 权限系统设计实现MVC4 + WebAPI + EasyUI + Knouckout

    权限系统设计实现MVC4 + WebAPI + EasyUI + Knouckout (一) 一.前言 之前的博客一直都还没写到框架的实现及权限系统,今天开始写我的权限系统,我以前做过的项目基本上都有 ...

  5. 基于Spring Cloud、JWT 的微服务权限系统设计

    基于Spring Cloud.JWT 的微服务权限系统设计 https://gitee.com/log4j/pig https://github.com/kioyong/spring-cloud-de ...

  6. 基于RBAC模型的权限系统设计(Github开源项目)

    RBAC(基于角色的访问控制):英文名称Rose base Access Controller.本博客介绍这种模型的权限系统设计.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来 ...

  7. SpringSecurity原理剖析与权限系统设计

    Spring Secutity和Apache Shiro是Java领域的两大主流开源安全框架,也是权限系统设计的主要技术选型.本文主要介绍Spring Secutity的实现原理,并基于Spring ...

  8. 权限系统设计(0):权限系统设计基本概念改需-MAC/RBAC引子

    此篇主要对权限系统设计所涉的一些专业术语重点梳理.从我们windows的文件系统 自主访问控制 到基于角色访问控制. 权限设计基本术语 对后面会用到的词汇做一个简要说明 什么是权限(许可) 权限(Pr ...

  9. 若依管理系统RuoYi-Vue(二):权限系统设计详解

    若依Vue系统中的权限管理部分的功能都集中在了系统管理菜单模块中,如下图所示.其中权限部分主要涉及到了用户管理.角色管理.菜单管理.部门管理这四个部分. 一.若依Vue系统中的权限分类 根据观察,若依 ...

随机推荐

  1. 定时任务框架Quartz-(一)Quartz入门与Demo搭建

    注:本文来源于:是Guava不是瓜娃  <定时任务框架Quartz-(一)Quartz入门与Demo搭建> 一.什么是Quartz 什么是Quartz? Quartz是OpenSympho ...

  2. mysql把一个查询结果当作一个子集来查询

    SELECT * FROM (SELECT * FROM table  GROUP BY column HAVING COUNT(column)>=3 ORDER BY column DESC ...

  3. ​Django-model

    Model:数据库操作 创建数据库的表: django不能自动创建数据库,但能创建表 在web的models里定义生成表 在project的settings里设置app定义和数据库信息 步骤: 1.创 ...

  4. Angular2 ng2 如何配置惰性加载

    需要修改至少四个地方1. 将子组件进行模块化操作2.生成子组件module .子组件router3.配置主路由 信息 改为loadChild4.配置appModule 删除引入 以product组件 ...

  5. 在GNU/Linux下制作Windows 10安装U盘

    今年春节回家期间,我需要将家里的一台安装了Debian Stretch的ZaReason笔记本电脑更换为Windows 10系统,好让爸妈从老台式机上的XP系统升级到新的平台上来.回家前,小仙女已在微 ...

  6. java servlet简述

    概述 servlet就相当于一个java小程序,其作用主要是为了接收并响应客户端的请求 入门 1.新建工程并新建个类 2.重写servlet的方法(重要的是service方法) 3.部署工程 a.在w ...

  7. 【Linux】在Win10上搭建WSL(适用于Linux的Windows子系统)

    1.打开WSL  ,控制面板 -- 程序 -- 程序和功能 -- 打开或关闭Windows功能 - 选中[适用于Linux的Windows子系统] 2.开启后重启电脑 3.在Win10自带的Micro ...

  8. Vue 2.6 中部分引入 TypeScript 的方法

    在 Vue 与 Cesium 联合开发的过程中,我发现很多 Cesium 代码不宜直接写在 .vue 文件中.同时由于 Cesium 库较为复杂,不借助 TypeScript 的静态类型会导致代码难维 ...

  9. shell 处理小数位加减法(比较)运算

    有一个shell脚本需要处理小数位运算,刚开始使用了expr Java代码   a=7.9 b=10 c=`expr  $a \> $b` 结果运算错误,因为expr只支持整数运算,不支持小数. ...

  10. 使用pl/sql developer登陆不了oracle

    1,Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务 这里最主要的原因在于:(参考:https://www.cnblogs.com/shangshan/p/6359880.h ...