您的位置:首页 > 数据库

shiro框架---关于用户登录和权限验证功能的实现步骤(二)

2018-02-13 23:12 946 查看
接上一篇文章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框架—关于用户登录和权限验证功能的实现步骤(三)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐