目录一. 用户角色权限二. 权限系统实现的两种方案2.1 用户权限实现权限系统2.2 用户角色权限实现权限系统一. 用户角色权限用户很简单的一个词你做出来一个产品或者一个网站任何人使用你的产品他都可以理解为是你产品的用户。角色角色是用户更高一层的抽象。刚才我们说到了所有人都是用户但在众多用户中还可以对他们进行细粒度的划分例如对大多数人都只是普通的用户有少部分不仅是用户还具备管理员身份。这只是简单的划分例如一个复杂的系统网上购物系统中有普通用户有VIP高级用户有超级管理员有货物供应商在平台上充当着不同的角色不同的角色通常也对应着不同的权限。权限上面提到了角色我们自然可以想到角色不同拥有的权限也不尽相同不可能给所有角色相同的权限。通常来说普通用户角色通常只有查看的权利没有增删改的权利而管理员角色通常具备增删改的权限这就是不同角色对应权限最直观的体现。用户和角色多对多关系一个管理员他既有用户的角色身份又有管理员的角色身份反之管理员也不一定只对应一个用户多个用户都可以是管理员。角色和权限多对多关系一个管理员他既有普通用户的权限又有普通用户没有的管理员权限反之多个人都可以拥有同一个相同的权限。二. 权限系统实现的两种方案2.1 用户权限实现权限系统在有些小的项目中比如大学计算机项目课程设计通常会发现关于用户权限的设计非常简单通常都是设计一个权限表列出各种权限然后就是用户表用户表中设计一个权限字段关联权限表的主键从而达到设计用户权限的目的。这种实现权限的方式优点就是非常简单只需要两张表就可以完成程序代码也非常简单难度较低缺点就是用户操作不便权限关系比较乱当然这只是相对而言我们一会拿它和方案二来做对比2.2 用户角色权限实现权限系统这种方式是比较广泛使用的权限设计系统它需要设计五张表分别是t1用户表存储当前系统所有用户信息t2角色表角色表创建后表数据通常相对固定就是几种不同的角色只在后续项目维护期间新增少量新的角色t3权限表权限表创建后数据通常也相对固定通常存储菜单页的操作权限只在后续项目新增菜单期间或许需要新增权限菜单数据t4角色和权限关联表记录不同角色对应的操作权限比如角色A允许操作菜单a、b角色B允许操作菜单b、ct5用户和角色关联表记录系统用户对应的角色可以存储多条。举例管理员用户对应 Manager 角色也对应 User 角色可以对应两条数据也可以权限高的角色 Manager 存储只对应一条数据但小编认为只存一条不太合理还是存多条比较合理。因为一个用户可能对应多个角色每个角色的各自权限可能存在交叉比如角色A允许操作菜单a、b角色B允许操作菜单b、c此时如果只存储一条关联数据无法存储除非你的项目在设计之初角色权限存在层级关系即角色a是低等级角色允许操作菜单a、b角色B比角色A等级高不仅包含菜单a、b还有菜单c此时只存储角色B一条数据可以覆盖到三个菜单操作权限否则必须存储多条关联关系在程序代码层面将关联关系存储为List用户和角色关联表然后进行权限的合并去重。第二种方案要比第一种方案在编码层面更复杂需要用到5张表并需要用到多表查询但是却非常利于系统对各个用户的权限控制加入角色表我们可以将所有的用户划分为不同的角色让权限关系更加清晰当我们需要添加新的用户时只需要让他与角色表相关联然后就可以通过角色与权限关联表确认当前用户都具有哪些权限程序的健壮性和可扩展性更强。