基于java系统开发权限设计,Java用户权限系统设计

权限设计在各个项目中都有着重要的作用,今天从简到难例举权限的设计过程。

e8afe49ed7e3c12b9261c7146a263897.png

青铜版 登录权限

最基础的登录权限设计,起码能够想到用户表,只要登录的用户名和密码正确且用户未被禁用,则登入系统,由此设计出用户表结构如下

表名: t_user,字段如下

id bigint

user_name varchar

password varchar

status int

create_time timestamp

前端请求流程如下:

1 前端发起post请求

2 输入用户名密码

3 校验用户名密码,如果正确则登入系统

后端请求流程如下:

1 后端得到前端发起的请求参数

2 如果前端请求的参数和数据库的数据一致则登入系统

3 如果前端请求的参数和数据库的数据不一致则拒绝登录

白银版 菜单权限

登录搞定,登录进去看白板界面发呆吗,这时候我们需要有个左边栏菜单,那么左边菜单的权限该如何设计呢

由此设计出菜单表和菜单关联表结构如下

菜单表:t_menu

id bigint

name varchar

status int

create_time timestamp

菜单关联表字段:t_user_menu_relation

user_id bigint

menu_id bigint

status int

create_time timestamp

菜单权限查询SQL伪代码:

select

a.menu_id,c.name menu_name

from

t_user_menu_relation a,t_user b , t_menu c

where

a.user_id = b.id and a.menu_id=c.id

and

a.user_id = #{logonUserId}

仅仅这样其实是不够的,这仅仅是不显示,还要控制直接浏览器拍url跳不过去

黄金版 用户组权限

1 做好了登录

2 做好了左边菜单

我们到了给用户分配权限的界面,点着点着,我用户这么多,一个个分配手还不废了啊,这时候我们想,有没有个一了百了的办法,这时候就到了用户组配置和权限设计阶段

表设计如下:

用户组表: t_user_group

id bigint

name varchar

create_time timestamp

用户组关联表:t_user_group_relation

user_id bigint,

group_id bigint,

status int

create_time timestamp

组权限关联表字段:t_group_menu_relation

group_id bigint

menu_id bigint

status int

这样分配的时候先配组,再下挂用户即可,这时候要先判断用户组是哪个,是否有显示菜单的权限

铂金版 按钮权限

分配到用户组了,看了看还挺满意,随便点击到一个页面,问题又来了,我每个页面都有按钮,我不想让普通用户有导出功能(VIP特供),我要控制它们显示和不显示(不可用),好吧,继续无脑一回

button按钮表字段

id,name,status,create_time

menu_button_relation菜单页面按钮关联表字段

menu_id,button_id,status,create_time

回到权限分配页面

之前是用户组分配菜单权限,现在菜单分配按钮权限也要有

是不是权限分配要变成两个页面?

星耀版 唯我独尊

我这么多的表,一次登录要把这么多的关联查询拿出来,我烦,我效率低下,我不开心,用什么结构能一次保存这么多个层级结构,像棵树一样,又不是二叉树只有两个点...

XML? JSON ? JSON?!!

哈哈,JSON 怼缓存,走mongo,美滋滋

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值