shiro框架---关于用户登录和权限验证功能的实现步骤(二)
2018-02-13 23:12
946 查看
接上一篇文章shiro框架—关于用户登录和权限验证功能的实现步骤(一)
不好意思,公司系统,我还是不要全贴出来了。
当前用户我是授权的是
然后我再将当前用户改为赋予
以上,我只是贴出来对于功能的系统、模块、菜单的三种分类,对于操作类,在这里其实就是按钮的控制。而对于按钮的控制,我是通过shiro标签来实现的,但是前三种,实际上就是根据sql查询返回给前端的。
对于上图中的系统类,其实存储在功能表中,是将那个图片,比如
对于上图中的模块类,其实多加了一级,用来将菜单类归类一下,
对于上图中的菜单类,这个是主要的内容,其实只是将前端对于某个jsp的路径,比如
当然以上三种,都要存储到对应的
这里其实就是拿着当前角色的id,还有勾选的多个功能id,然后去添加了多条角色功能关联表的记录。这样就将当前角色id与多种功能关联起来了。
用户上授予不同角色
这里的用户,当然可以授予多个角色,这里我仅仅只是授予了一个角色,不管几个,其实也就是在保存的时候,去添加用户角色关联表,将用户id和角色id关联起来。这样就在一个用户上绑定了多个角色,如果你这些角色上带有对应的
以下是用户在授予多个角色下结构图,挺简单的:
用户登录后,获取当前站点的角色的所有权限,这也是我最上边的实现sql
即
就是将这五张表关联一下,然后根据用户表的
这样在用户登录该系统后,就可以根据该sql,查询出来属于当前用户,当前系统的所有功能列表。返回给前端,前端再根据不同的功能类型(没有返回按钮,即类型为4的功能),分类,从
说到这里,我觉得肯定还有人有疑问,我这样返回,前端怎么实现,其实这个很好实现,另外,我觉得不要关心前端如何展示,我们只需要关心实现根据不同用户,不同系统,返回相应的结果即可,其他的等你看到一次前端怎么实现的就知道有多简单了。
下一篇,进入shiro框架在系统项目中的配置介绍
下一篇文章shiro框架—关于用户登录和权限验证功能的实现步骤(三)
本篇主要通过一个已经实现用户登录和权限验证的系统,结合sql,展示一下我的实现。
首先我设置的权限,即功能表,其中func_type字段分为四类(系统、模块、菜单、操作)。
一、系统的展示
下边对于同一个系统内,一个用户,我在不同授权下的展示情况:不好意思,公司系统,我还是不要全贴出来了。
当前用户我是授权的是
测试角色,对于当前的角色我赋予的是以上的功能,即只显示了首页、系统管理、资源管理三个模块,以及部分菜单。下边是我对当前用户授权的
测试角色
然后我再将当前用户改为赋予
测试角色2,来看一下效果。
以上,我只是贴出来对于功能的系统、模块、菜单的三种分类,对于操作类,在这里其实就是按钮的控制。而对于按钮的控制,我是通过shiro标签来实现的,但是前三种,实际上就是根据sql查询返回给前端的。
对于上图中的系统类,其实存储在功能表中,是将那个图片,比如
test.png这个字符串存储在功能表上的
func_url字段上
对于上图中的模块类,其实多加了一级,用来将菜单类归类一下,
func_url上存储的是空字符串。
对于上图中的菜单类,这个是主要的内容,其实只是将前端对于某个jsp的路径,比如
/views/test.jsp这样的字符串,存储到
func_url字段上。
当然以上三种,都要存储到对应的
func_type字段,即要选对相应的功能类型。
二、基于sql的实现
角色上授予不同功能这里其实就是拿着当前角色的id,还有勾选的多个功能id,然后去添加了多条角色功能关联表的记录。这样就将当前角色id与多种功能关联起来了。
用户上授予不同角色
这里的用户,当然可以授予多个角色,这里我仅仅只是授予了一个角色,不管几个,其实也就是在保存的时候,去添加用户角色关联表,将用户id和角色id关联起来。这样就在一个用户上绑定了多个角色,如果你这些角色上带有对应的
site_id,即站点,那相当于你可以对当前用户赋予多个系统站点的角色,这样在登录的时候,可以通过
site_id来筛选是否有某个系统的登录权限了。有些人可能觉得
siteid应该放到功能表里,我这里放到角色里,是方便于在登录系统验证的时候少关联两张表,只要自己合理应用,我觉得没问题。
以下是用户在授予多个角色下结构图,挺简单的:
用户登录后,获取当前站点的角色的所有权限,这也是我最上边的实现sql
即
select distinct f.* from sys_User u,Sys_User_Role_R ur,sysy_Role r,Sys_Func_Role_R fr,Sys_Func f where u.user_id = ur.user_Id and ur.role_Id=r.id and r.id=fr.role_Id and fr.func_Id=f.id and u.user_name='lsf' and r.site_id='1' and f.func_type !=4
就是将这五张表关联一下,然后根据用户表的
user_name字段和角色表的
site_id来查询出属于当前用户的站点1系统的功能列表,上边
func_type != 4表示不查询按钮类的功能,因为按钮类我是通过shiro的标签来控制的。关于shiro标签的应用,看这篇文章,shiro框架—关于用户登录和权限验证功能的实现步骤(七)。
这样在用户登录该系统后,就可以根据该sql,查询出来属于当前用户,当前系统的所有功能列表。返回给前端,前端再根据不同的功能类型(没有返回按钮,即类型为4的功能),分类,从
func_url中获取出值来,填充到前端的样式中,这样就实现了不同用户与功能的关联。
说到这里,我觉得肯定还有人有疑问,我这样返回,前端怎么实现,其实这个很好实现,另外,我觉得不要关心前端如何展示,我们只需要关心实现根据不同用户,不同系统,返回相应的结果即可,其他的等你看到一次前端怎么实现的就知道有多简单了。
下一篇,进入shiro框架在系统项目中的配置介绍
下一篇文章shiro框架—关于用户登录和权限验证功能的实现步骤(三)
相关文章推荐
- shiro框架---关于用户登录和权限验证功能的实现步骤(一)
- shiro框架---关于用户登录和权限验证功能的实现步骤(四)
- shiro框架---关于用户登录和权限验证功能的实现步骤(七)
- shiro框架---关于用户登录和权限验证功能的实现步骤(五)
- shiro框架---关于用户登录和权限验证功能的实现步骤(八)
- shiro框架---关于用户登录和权限验证功能的实现步骤(六)
- shiro框架---关于用户登录和权限验证功能的实现步骤(三)
- 基于权限安全框架Shiro的登录验证功能实现
- spring boot配置shiro安全框架及用户登录权限验证实现
- 基于权限安全框架Shiro的登录验证功能实现
- 从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程
- 使用AjaxPro框架实现无刷新用户登录验证【原创】
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- 框架 day54 BOS项目练习(权限/角色/用户管理(CRUD),基于数据库实现动态授权,ehcache缓存权限,shiro标签,菜单权限展示)
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- springMVC中实现用户登录权限验证
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- 使用AjaxPro框架实现无刷新用户登录验证【原创】