java系统权限设计

权限其实也就是登录的用户拥有的数据权限和操作权限(菜单权限),一般主要就是这两种;
数据权限就是指你能看到什么数据,简单的举个例子,你登录12306 只能看到自己的购买的车票,但是看不到其他人购买的车票,这就是数据权限,数据隔离;
操作权限就是有些系统中的东西你能看到,但是不能操作,举个例子,淘宝中你申请退款,必须等商家确认,而你既看不到商家的确认按钮,也不能操作确认退款这个操作,这就是操作权限,也可以叫做菜单权限;

那么系统的用户的权限一般是如何设计的呢?
一般用的操作权限都是通过角色来控制的,每个用户都有一个或者多个角色,每个角色都有相应的操作菜单权限,这样就相当于每个人有了这些操作权限;
而数据权限也可以通过角色绑定上,这样也就是通过角色来控制两种权限;
经过实践,上述这种方案会有弊端,就是当我想给其中一个人多分配一些数据权限的时候,当我更改这个人的角色的数据权限,会导致所有拥有这个角色的人的数据权限都进行了更改,这不是我想要的,那么解决办法就是创建一个这个人独有的角色,然后重新配置,其实这样是不合理的,会创建很多角色的数据,而操作权限则不会,因为我一般新增了一个菜单,当然是想给用户用的,那么通过角色绑定的操作权限可以很方便的分配给相应的人;

这里推荐另一种;
就是操作权限是不变的,仍然放到角色上绑定,而数据权限则绑定到人的身上,也就是每个人的数据权限都可以是不一样的,这样设计会很灵活,数据权限的设置不会出现上述情况中的问题,但是会存在,一个人的系统界面是这样的,你有这些数据能看到而不能操作,其实这也是正常现象,因为类似淘宝就是这样的,让你看,但是不会让你操作; 还有就是你有这个菜单的操作权限,但是由于没有分配数据,导致你看不到这个菜单或者按钮,导致也是无法操作,这都属于正常现象;

那么附上一般的表设计;

CREATE TABLE `auth_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',
  `username` varchar(255) DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) DEFAULT NULL COMMENT '密码',
  `email` varchar(255) DEFAULT NULL COMMENT '邮箱',
  `role_id` int(11) DEFAULT NULL COMMENT '角色id',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_unique` (`username`) COMMENT '名称唯一'
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='用户信息'

CREATE TABLE `auth_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色id',
  `name` varchar(55) DEFAULT NULL COMMENT '角色名称',
  `type` varchar(55) DEFAULT 'USER' COMMENT '角色类型 字典项',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `remark` varchar(55) DEFAULT NULL COMMENT '角色备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='用户信息'

CREATE TABLE `auth_menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单id',
  `menu_name` varchar(55) DEFAULT NULL COMMENT '菜单名称',
  `menu_code` varchar(55) DEFAULT NULL COMMENT '菜单编码',
  `menu_level` int(2) DEFAULT '1' COMMENT '菜单级别',
  `menu_icon` varchar(55) DEFAULT NULL COMMENT '菜单图标',
  `menu_url` varchar(255) DEFAULT NULL COMMENT '菜单地址',
  `menu_pid` int(11) DEFAULT '0' COMMENT '菜单父id',
  `menu_type` int(2) DEFAULT '1' COMMENT '菜单类型 1菜单 2按钮',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `remark` varchar(55) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 COMMENT='用户信息'


CREATE TABLE `auth_role_menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `menu_id` int(11) DEFAULT NULL COMMENT '菜单id',
  `role_id` int(11) DEFAULT NULL COMMENT '角色id',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COMMENT='用户信息'

这里展示的主要是用户的操作权限的设计

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞旅行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值