-
2020-12-08 17:10:12
一、角色的介绍
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
与administrator的对比,administrator能看到这些内容
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。二、用户的添加
(1)rabbitmqctl add_user 用户名 密码
./rabbitmqctl add_user test test
(2)rabbitmqctl set_user_tags 用户名 角色
.
更多相关内容 -
ASP.NET CORE[练习8]-Identity-用户角色、给用户分配角色、角色校验
2019-09-03 23:21:11用户管理、用户登录已经完成,下面开始做用户角色,以及给用户分配角色。 1.角色管理 2.给用户分配角色 3.角色校验 角色管理 角色管理使用到了RoleManager,同用户管理一样,先做一个查、增、改。 1.一个...练习+博客,量化自己的进步!
用户管理、用户登录已经完成,下面开始做用户角色,以及给用户分配角色。
1.角色管理
2.给用户分配角色
3.角色校验角色管理
角色管理使用到了RoleManager,同用户管理一样,先做一个查、增、改。
1.一个controller,两个视图,一个RoleViewModel
2.RoleManager< IdentityRole > roleManager;
roleManager.FindByIdAsync() 根据Id查询角色。
roleManager.CreateAsync() 创建角色。
roleManager.UpdateAsync() 更新角色。public class RoleController : Controller { // 这里没有像用户管理那样扩展了IdentityUser,这里使用了基础的IdentityRole private readonly RoleManager<IdentityRole> roleManager; public RoleController(RoleManager<IdentityRole> roleManager) { this.roleManager = roleManager; } public async Task<IActionResult> Index() { return View(await roleManager.Roles.ToListAsync()); } public IActionResult Add() { ViewBag.Type = "Add"; return View(); } public async Task<IActionResult> Edit(string Id) { ViewBag.Type = "Edit"; var model = await roleManager.FindByIdAsync(Id); return View(nameof(Add), new RoleViewModel { Id = model.Id, Name = model.Name }); } [HttpPost] public async Task<IActionResult> Add(RoleViewModel vm) { if (!ModelState.IsValid) { ModelState.AddModelError(string.Empty, "数据异常"); return View(vm); } var type = Request.Form["Type"]; if (type == "Add") { var result = await roleManager.CreateAsync(new IdentityRole { Name = vm.Name }); if (result.Succeeded) { return RedirectToAction(nameof(Index)); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } else { var model = await roleManager.FindByIdAsync(vm.Id); if (model == null) { ModelState.AddModelError(string.Empty, "角色不存在!"); } model.Name = vm.Name; var result = await roleManager.UpdateAsync(model); if (result.Succeeded) { return RedirectToAction(nameof(Index)); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } return View(vm); } }
先只做角色的增改以及列表查询
@using Microsoft.AspNetCore.Identity @model List<IdentityRole> @{ ViewData["Title"] = "Index"; } <h1>角色列表</h1> <div class="container"> <table class="table table-bordered table-striped"> <thead> <tr> <td>编号</td> <td>角色</td> <td>操作</td> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <td>@item.Id</td> <td>@item.Name</td> <td> <a class="btn btn-warning" asp-route-Id="@item.Id" asp-action="Edit">编辑</a> </td> </tr> } </tbody> </table> <a class="btn btn-primary" asp-action="Add">添加角色</a> </div>
这个是Index的列表视图
@model RoleViewModel @{ ViewData["Title"] = "Add"; } <h1>添加角色</h1> <form role="form" method="post" asp-action="Add"> <input type="hidden" name="Type" value="@ViewBag.Type"/> @if (ViewBag.Type == "Edit") { <input type="hidden" asp-for="Id"/> } <div class="form-group row"> <label class="col-sm-2 col-form-label" asp-for="Name"></label> <div class="col-sm-10"> <input type="text" class="form-control" asp-for="Name"/> </div> <span asp-validation-for="Name"></span> </div> <div asp-validation-summary="ModelOnly"></div> <button type="submit" class="btn-primary">提交</button> </form>
这个是添加、修改的视图
public class RoleViewModel { public string Id { get; set; } [Required,Display(Name ="角色")] public string Name { get; set; } }
效果图如下:
之前的学生管理、用户管理,都是这么一套做的,所以做这个角色管理还是挺快的。给用户分配角色
1.一个get请求,一个post提交,一个UserRoleViewModel,一个视图页面
2.roleManager.FindByIdAsync(Id) 获取角色。
userManager.Users.ToListAsync() 获取所有用户,用于分配角色。
userManager.IsInRoleAsync(user,role.Name) 判断用户是否已分配角色。
userManager.FIndByIdAsync(userId) 获取用户。
userManager.AddToRoleAsync(user,role.Name) 分配角色给用户。
3.编辑角色的需要做修改,添加角色用户的展示。要在编辑角色的时候展示角色的用户,效果如下:
后台的代码也需要编辑一下:public async Task<IActionResult> Edit(string Id) { ViewBag.Type = "Edit"; var model = await roleManager.FindByIdAsync(Id); // 获取角色的所有用户 var users = await userManager.GetUsersInRoleAsync(model.Name); ViewBag.Users = users; return View(nameof(Add), new RoleViewModel { Id = model.Id, Name = model.Name }); }
编辑角色的视图也编辑一下,添加如下代码:
@{ ViewData["Title"] = "Add"; var users = ViewBag.Users as List<ApplicationUser>; } ... @if (ViewBag.Type == "Edit") { <hr /> <h2>角色用户</h2> <ul> @foreach (var u in users) { <li>@u.UserName</li> } </ul> <a asp-action="AddRoleToUser" class="btn btn-primary" asp-route-roleId="@Model.Id">为角色添加用户</a> }
添加两个Action,给用户分配角色的一个get页面,一个post提交:
public async Task<IActionResult> AddRoleToUser(string roleId) { var role = await roleManager.FindByIdAsync(roleId); if (role == null) { return RedirectToAction(nameof(Index)); } var vm = new UserRoleViewModel { RoleId = roleId }; var allUser = await userManager.Users.ToListAsync(); foreach (var u in allUser) { // 判断用户是否已经分配又该角色 if (!await userManager.IsInRoleAsync(u, role.Name)) { vm.Users.Add(u); } } return View(vm); } [HttpPost] public async Task<IActionResult> AddRoleToUser(UserRoleViewModel vm) { if (!ModelState.IsValid) { ModelState.AddModelError(string.Empty,"数据异常!"); return View(vm); } var user = await userManager.FindByIdAsync(vm.UserId); var role = await roleManager.FindByIdAsync(vm.RoleId); if (user == null || role == null) { ModelState.AddModelError(string.Empty,"用户不存在或者角色不存在!"); return View(); } var result = await userManager.AddToRoleAsync(user,role.Name); if (result.Succeeded) { // 添加成功跳转到角色编辑页面 return RedirectToAction(nameof(Edit), new { Id = vm.RoleId }); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty,error.Description); } return View(vm); }
一个视图页面:
@model UserRoleViewModel @{ ViewData["Title"] = "AddRoleToUser"; } <h1>给用户分配角色</h1> <form role="form" method="post" asp-action="AddRoleToUser"> <input asp-for="RoleId" type="hidden"/> <div class="form-group row"> <label class="col-sm-2 col-form-label">用户</label> <div class="col-sm-10"> <select class="form-control" asp-for="UserId" asp-items="@(new SelectList(Model.Users,"Id","UserName"))"> <option>请选择</option> </select> </div> </div> <div asp-validation-summary="ModelOnly"></div> <button type="submit" class="btn btn-primary">提交</button> </form>
效果图如下:
角色校验
用户管理、角色管理、给用户分配角色都做好了,最后就是应用了,业务场景为,Student学生管理只允许角色为“Administrator”的用户访问。角色校验有两种校验方式,一种是如下1,直接Roles校验;一种是如下2、3、4的策略方式。
1.[Authorize(Roles = “Administrator”)] 应用到Controller上或Action上
2.services.AddAuthorization 在startup.cs的ConfigureService方法中添加授权。
3.options.AddPolicy 在services.AddAuthorization中添加授权策略。
AddPolicy可以添加多种约束方式:
policy.RequireRole 角色约束
policy.RequireClaim Claim约束(这个Claim有点像角色,下节再做练习)
…
4.[Authorize(Policy = “Admin”)] 应用策略到Controller上或Action上直接校验Roles:
[Authorize(Roles ="Administrator")] public class StudentController : Controller { ...
前面做练习,已经将swk用户分配了Administrator角色,如此用户swk登录口是可以访问的。[Authorize(Roles ="Visitor")] public class StudentController : Controller { ...
这里校验角色为visitor,没有这个角色,更没有给swk添加了这个角色。所以访问是受限制的,之所以报上面的错误,是应为跳转/Account/AccessDenied,这个页面没有做。但我们的角色校验是有效的。使用Policy校验:
services.AddAuthorization(options => { // Admin是这条授权策略的名字,第二个参数是具体策略,RequireRole的参数类型是params string[] options.AddPolicy("Admin", policy => policy.RequireRole("Administrator")); });
添加授权
[Authorize(Policy = "Admin")] public class StudentController : Controller { ...
应用是一样的,只不过Roles变为了Policy, Admin这个名字要对应添加的策略的名称。
效果是一样的。总结
用户有多个角色,授权有多中策略,根绝情况灵活使用。 -
用户角色及权限管理设计实例(基于RBAC模型)
2021-06-22 17:04:10最后再根据现实的组织方式为每用户分配角色。 以电视剧《潜伏》为背景举例,我们要为保密局天津站建设一个管理系统,这里就要理清相关人员的各种关系。天津站的组织关系如下 一把手是站长吴敬中,下设两个部门:...1. 五张表模型
RBAC(Role-Based Access Control),基于角色的访问控制。做权限控制系统最常见的方式就是基于此模型的。它的基本思想就是:把资源能否访问、操作能否执行设定为权限;设定不同角色配对权限,使某种权限在某种角色下为被允许状态;最后再根据现实的组织方式为每用户分配角色。由此构建 5 个表:
编号 1 2 3 4 5 名称 用户表 角色表 权限表 用户角色关系表 角色权限关系表 表名 sys_users sys_roles sys_perms rel_user_role rel_role_perm 其中:
- 用户和角色关系为多对多;
- 角色与权限关系也是多对多。
2. 需求分析
以电视剧《潜伏》为背景举例,我们要为保密局天津站建设一个管理系统,这里就要理清相关人员的各种关系。
天津站的组织关系(用户、角色、用户角色关系)如下
- 一把手是站长吴敬中,下设两个部门:机要室和行动队。
- 机要室主任为余则成。
- 行动队由队长马奎,还有两个小喽啰米志国、陈北伐组成。
- 此外,余则成还是站长的学生(心腹下属)。
保密局的日常工作有这几项(权限):
- 监听电报。监听截获内外界各组织的电报;
- 打电话。给南京打电话,给站长太太打电话、给穆连成打电话,以及给绣春楼打电话;
- 派人跟穆晚秋谈恋爱。从而榨取穆连成财宝;
- 帮站长收别人送的一辆小汽车。斯蒂庞克牌的。
很显然,上边这些任务不是人人能做(角色权限关系):
- 电话大家都能用;
- 电讯室的电报不能让小喽啰随便听;
- 跟穆晚秋谈恋爱、代收小汽车都是帮站长敛财的私事,只能让心腹余则成去做。
因此,以上关系可梳理为下图所示
3. 数据库设计
据上,理出用户、角色、权限、用户-角色、角色-权限的关系如下图,这就是常见的权限5表。当然现实应用中的表不可能就这么两三列,为了简化绘图这里只显示了关键属性,其他需要随意添加哈。
对应的,构建数据库表。
1. 用户表(sys_users)
id name 1 吴敬中 2 余则成 3 马奎 4 米志国 5 陈北伐 2. 角色表(sys_roles)
id name 1 站长 2 机要室主任 3 行动队队长 4 小喽啰 5 站长心腹 3. 权限表(sys_perms)
id operation 1 监听电报 2 打电话 3 和晚秋搞对象 4 代收斯蒂庞克 4. 用户-角色表(rel_user_role)
id uid rid *解释 1 1 1 吴敬中 -> 站长 2 2 2 余则成 -> 机要室主任 3 2 5 余则成 -> 站长心腹 4 3 3 马奎 -> 行动处长 5 4 4 米志国 -> 小喽啰 6 5 4 陈北伐 -> 小喽啰 5. 角色-权限表(rel_role_perm)
id rid pid *解释 1 1 1 站长 -> 监听电报 2 1 2 站长 -> 打电话 3 2 1 机要室主任 -> 监听电报 4 2 2 机要室主任 -> 打电话 5 3 1 行动处长 -> 监听电报 6 3 2 行动处长 -> 打电话 7 4 2 小喽啰 -> 打电话 8 5 3 站长心腹 -> 和晚秋谈恋爱 9 5 4 站长心腹 -> 代收斯蒂庞克
4. 用户分组
用户数量大且可分组授权时,添加 3 个表。
- 用户组
- 用户-用户组
- 用户组-权限
米志国和陈北伐同属 行动二科 的小喽啰,他们具有相同权限,因此将上面数据库设计的表结构更为
1. 用户组表(sys_groups)
id name 1 行动二科 2. 用户-组表(rel_user_group)
id uid gid *解释 1 4 1 米志国 -> 行动二科 2 5 1 陈北伐 -> 行动二科 3. 组-角色表(rel_group_role)
id gid rid *解释 1 1 4 行动二科 -> 小喽啰
5. 权限分类
基于 Web 的应用主要通过
URL
来实现对不同资源的控制,如查看页面、访问数据等。所以权限指的其实就是对 URL 的控制。一个角色有多少个权限就取决于他有多少个 URL 的访问权限。
当然也可以将一个网站资源的权限进行再次划分,分为菜单、导航栏、页面元素和功能操作(根据需要,不一定非拆分)。6. 参考
[1]. 用户,用户组,角色,权限
https://blog.csdn.net/qq_30519491/article/details/80941201
[2]. RBAC(基于角色的访问控制权限的基本模型)
https://blog.csdn.net/weixin_41174072/article/details/83387223
[3]. RBAC权限管理系统
https://www.cnblogs.com/zenan/p/10576489.html
[4]. rbac 表结构的。设计
https://www.cnblogs.com/chengege/p/10695713.html.
.
.
.
.
.
桃花仙人种桃树,又摘桃花换酒钱_
-
elasticsearch 用户角色管理
2020-01-20 19:55:28elasticsearch用户角色管理 官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/security-api.html 用户角色可以通过kibana进行管理,也可直接用api进行操作 **************************** ...
elasticsearch 用户角色管理
官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/security-api.html
说明:用户角色可以通过kibana进行管理,也可直接用api进行操作
****************************
安全权限:官网链接
cluster privileges:集群相关权限,包括all、create_snapshot等
indices privileges:索引相关权限,包括all、create、create_doc、delete等
run as privilege:认证用户具有其他用户相同的权限
application privileges:该权限不操作elasticsearch,只用has privileges api、get privileges api进行判断
****************************
角色操作
***********************
创建、更新角色:
命令格式:
POST /_security/role/<name> {request_body}
PUT /_security/role/<name> {request_body}
name:role的名称
request_body:
cluster:设置集群权限
indices:设置索引权限
applications:应用权限,包含application、privileges、resources属性
global:全局性的集群权限
run_as:赋予该role的用户拥有其他用户的权限
metadata:元数据
示例
***********************
其他操作
清除缓存:POST /_security/role/<name>/_clear_cache
删除role:DELETE /_security/role/<name>
获取role
GET /_security/role:获取所有role
GET /_security/role/<name>:获取指定role
****************************
用户操作
***********************
创建、修改用户
命令格式:
POST /_security/user/<username> { request_body }
PUT /_security/user/<username> { request_body }
request_body:
enabled:是否启用该用户、默认为true
password:用户密码
roles:用户拥有的role
full_name:用户全名
email:用户email地址
password_hash:密码的hash值
metadata:说明的元数据信息
示例
***********************
其他操作
修改密码:
POST /_security/user/_password:修改当前用户密码
POST /_security/user/<username>/_password:修改指定用户密码
删除用户:DELETE /_security/user/<username>
禁用用户:PUT /_security/user/<username>/_disable
启用用户:PUT /_security/user/<username>/_enable
获取用户:
GET /_security/user:获取所有用户信息
GET /_security/user/<username>:获取指定用户信息
-
(用户角色)超级全面的权限系统设计方案
2020-01-11 12:56:45目前在公司负责权限这块,所以对权限这块的设计比较熟悉,公司采用微服务架构,权限系统自然就独立出来了,其他业务系统包括商品中心,订单中心,用户中心,仓库系统,小程序,多个APP等十几个系统和终端 1、权限模型 ... -
Vue + Spring Boot 项目实战(十一):用户角色权限管理模块设计
2019-09-15 11:10:08第二部分目录 * 总目录 Vue + Spring Boot 项目实战(十一):用户角色权限管理模块设计 Vue + Spring Boot 项目实战(十二):访问控制及其实现思路 Vue + Spring Boot 项目实战(十三):使用 Shiro 实现用户信息... -
用户角色权限的简单理解
2019-06-24 19:40:42用户角色权限,它们之间的关系是用户依赖于角色,角色依赖于权限。权限四个属性:增、删、改、查。角色不仅依赖于权限,还依赖于目标,也就是数据源,简单理解是这个角色可以访问哪些资源。 用户权限大致就分三个... -
TIDB - TIDB用户角色权限管理
2021-11-23 21:48:42一、TIDB 中的权限 ...下面我们针对TIDB数据库来演示下用户角色权限的配置。注意以下所有操作均在TIDB数据库中进行。 二、用户管理 1. 创建新用户,并指定用户的登录ip和密码 create user 'bxc' identified b -
Gitlab用户角色权限Guest、Reporter、Developer、Master、Owner
2021-07-17 15:10:24Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner Gitlab权限管理 Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner Guest:可以创建issue、发表评论,不能读写版本... -
sqlserver创建用户角色与授权
2020-04-07 08:57:14sqlserver创建用户角色与授权 需求描述: web应用开发sqlserver作为数据存储,默认使用sa进行业务操作,如果发生用户密码泄露,危害性极大。 解决办法: 根据各业务库新建用户,专门用于特定数据库; 创建用户与授权... -
浅析用户角色与用户画像
2018-05-20 21:00:57大家好,我是IT修真院深圳分院第8期的学员,一枚正直纯洁善良的PM,今天给大家分享以下知识点是修真院pm任务中的用户画像与用户角色辨析背景因为我发现尽管大家都讲用户画像,但表述出来的东西都不一样。我自己就去... -
WordPress之新增用户角色,赋予权限和修改默认用户角色的名称
2019-08-29 17:08:53WordPress系统本身自带了多个用户角色等级,方便管理WordPress用户的权限。 用户角色 WordPress系统本身自带了多个用户角色等级,方便管理WordPress用户的权限。有时候我们也需要给网站新增用户角色并赋予一定的... -
jenkins用户角色权限配置
2020-10-11 23:33:05用户权限配置参考: https://www.cnblogs.com/zz0412/p/jenkins_jj_14.html ...QA也为一致(dev为开发测试环境,qa为测试环境) 配置分配角色 配置用户权限:qa为测试人员的账户,page为前端开发人员的帐号。 验证: -
springboot整合shiro实现基础的用户角色权限管理
2019-09-19 11:26:42用户角色权限需要解决的问题及shiro的解决方案2. 过滤器3. 登录并获取菜单权限4. shiro授权5. 总结 项目地址 1. 用户角色权限需要解决的问题及shiro的解决方案 灵活配置需要和不需要拦截的页面 shiro提供了过滤... -
角色用户权限DB设计
2014-01-07 15:24:18一直想整理一篇关于用户角色权限的设计,这几天通过网上资料和自己实际工作中运用到的资源把用户角色权限的数据库表设计出来。 基础表有3张: 角色表--用来记录角色名称 用户表--用来记录登录用户名称和登录密码 ... -
权限管理系统中的根据用户角色动态生成用户权限菜单树
2017-10-03 15:46:09权限管理系统中的根据用户角色动态生成用户权限菜单树 源码地址https://github.com/dabai-cai/thesis 暑假在工作室学习了基于RBAC的权限管理系统,学的比较浅显,记录下方便以后学习可以看。 一、首先讲讲我... -
用户角色权限简单模型
2019-08-18 14:00:15用户角色权限简单模型 -
Jenkins 用户角色及权限管理
2019-08-16 14:00:00Jenkins 角色权限管理 官方文档:https://jenkins.io/zh/doc/ 1、插件管理 首先,登录以管理员身份登录Jenkins 然后,在插件管理模块中,检查Role-based Authorization Strategy 插件是否已经安装。 最后,插件安装... -
Python Flask学习_用户角色和用户权限
2018-07-04 23:36:06在Web App中 ,存在和游客(匿名用户),普通用户,协管员,管理员等不同的角色,应当为不同的角色赋予不同的权限。各个用户只能在权限范围内访问页面、进行操作等。通过一个例子来说明。本例中的用户分为4中:游客... -
数据库管理员用户角色组权限设计
2017-03-15 22:47:16用户角色设计,权限设计,角色组,数据库设计,用户角色权限表设计 -
mybatis用户角色权限一对多关联查询
2017-08-24 11:06:00mybatis一对多关联查询案例 1.需求 2.数据库说明 3.实体说明 ...用户表(users) id,用户名,真是姓名,密码,性别,出生日期,描述,创建日期角色表(roles) id,角色描述权限表(permissions) id,权限名称, -
java权限管理与用户角色权限设计
2018-06-16 00:14:28java权限管理与用户角色权限设计2016年10月29日 19:24:41阅读数:12545实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端... -
mongoDB中的用户角色管理,及yapi的搭建
2019-06-26 14:51:05mongoDB中的用户角色管理,及yapi的搭建参考博客创建admin用户具体操作步骤给某个数据库创建普通用户具体操作步骤mongo roles权限说明刚建立了 userAdminAnyDatabase 角色,用来管理用户,可以通过这个角色来创建、... -
基于SSH的最基本的用户 角色 权限管理
2013-11-14 19:37:21基于SSH的最基本的用户 角色 权限管理,主要实现在用户管理模块,其他CRUD请自行添加 -
用户 角色 权限 菜单
2017-09-28 20:27:55用户 角色 权限 菜单 -
SpringSecurity动态加载用户角色权限实现登录及鉴权
2019-11-27 07:39:55很多人觉得Spring Security实现登录验证很难,我最开始学习的时候也这样觉得。...后来我搞懂了:根本不用你...你只需要告诉Spring Security用户信息、角色信息、权限信息、登录页是什么?登陆成功页是什么?或者其他... -
基于vue-element-admin的异步权限路由——用户角色(一)
2020-05-03 15:50:30第一次使用vue-element-admin这个后台...在使用的过程中,经过多个项目的优化,实现了基于用户角色权限进行动态生成路由表的功能。 原解决方案异步路由: /** * 异步路由 * 需要根据用户角色动态加载的路由 *... -
GreenPlum 之数据库的用户角色管理
2019-08-01 11:11:441,创建用户role 在greenplum后续版本中,已经将使用role取代了user,所以创建用户就是create role: [gpadmin@dwhm01_2_111 ~]$ psql -d yueworld_db psql (8.2.15) Type "help" for help. ... -
Flask Web 开发 用户角色
2016-08-31 14:38:01用户角色 ,拥有多少权限, 千万不要搞混淆!!! 比如 新建用户 ,一般就只有3种功能,就是关注,评论,写文章,那么就是 0X01 , 0X02 , 0X04 三者进行位运算的或运算!!( 可以理解为功能累加 ) ... -
数据库设计经典案例用户角色权限设计E-R图
2019-12-29 17:48:26