zoukankan      html  css  js  c++  java
  • 通用权限sql设计

    基础版

    概念:

    权限控制一般分为两种

    1. 菜单可见权限

        控制哪些菜单、按钮可见,不可见。

    2. 数据可见权限

        控制哪些数据可见,不可见。

    今天只说《菜单可见权限》

    那么想要控制菜单可见的权限,最简单的,需要3个表:

    用户表-角色表-菜单表

    为什么中间要加个角色呢?自己想。

    思考:多个用户对应多种角色,多种角色对应多个菜单

    他们都属于多对多关系,于是需要中间表,他们变成了这样

    用户表-用户角色表-角色表-角色菜单表-菜单表

    上图

    上详情图

    进阶版

    1. 添加《用户菜单关联表》

    这种属于特殊情况,用于一些特殊用户。假设用户是管理员,直接通过这个表关联。更加方便快捷。

    2. 菜单表优化

    菜单一般分为3个等级:模块、菜单、按钮

    通常通过parentId(父级ID)来表示关系。

    还是上图吧

    3. 拆分按钮,当按钮过多时,将按钮从菜单表中拆分出来,形成按钮表。

    菜单与按钮一般都是一个菜单对应多个按钮,于是只要在按钮表中保留一个菜单ID即可,至于为什么不在菜单表中保留按钮ID,自己去想。

    4. 权限表进阶

    为了简单一些,在这之后省略中间关联表的描述,但是它还是在的,心里记得就行。

    表现形式一:

    用户-角色-菜单-权限表

    用户-角色-按钮-权限表

    模块-菜单-按钮(拆分表)

    这里添加了一个加权限表的,目的是为了把权限表缓存起来。查询权限时,只需要在缓存中查询,而不用去数据库。

    但是在每次授权之后,需要清除一下缓存。

    总结:

    无论如何变化、进阶,本质还是最基础:

    用户-角色-菜单

    这样一个思想。

  • 相关阅读:
    [ACM] POJ 3687 Labeling Balls (拓扑排序,反向生成端)
    xml和json选择奖
    android 如何分析java.lang.IllegalArgumentException: Cannot draw recycled bitmaps异常
    代码农民提高生产力
    'Basic' attribute type should not be a persistence entity/a container
    13 适配器
    密码学基础知识(四)分组密码
    PKCS #1 RSA Encryption Version 1.5 填充方式
    rsa加密--选择padding模式需要注意的问题。。。
    RSA PKCS1 填充方式
  • 原文地址:https://www.cnblogs.com/BingLiVIP/p/13414083.html
Copyright © 2011-2022 走看看