目录
对于一个企业级的平台或系统或站点,权限模块或系统是必不可少的。权限管控,即权力限制,不同的人由于拥有不同权力,他所看到的、能使用的东西不一样。对应到一个应用系统,其实就是一个用户可能拥有不同的数据权限(看到的)和操作权限(使用)。数据包括:菜单、列表、记录详情等,操作包括:新增,查看,编辑,删除等。
主流权限模型主要分为以下五种:
ACL模型:访问控制列表
DAC模型:自主访问控制
MAC模型:强制访问控制
ABAC模型:基于属性的访问控制
RBAC模型:基于角色的权限访问控制
访问控制列表,Access Control List,ACL是最早的、最基本的一种访问控制机制,是基于客体进行控制的模型,在其他模型中也有ACL的身影。为了解决相同权限的用户挨个配置的问题,后来也采用用户组的方式。
原理:每一个客体都有一个列表,列表中记录的是哪些主体可以对这个客体做哪些行为,非常简单。
例如:当用户A要对一篇文章进行编辑时,ACL会先检查一下文章编辑功能的控制列表中有没有用户A,有就可以编辑,无则不能编辑。再例如:不同等级的会员在产品中可使用的功能范围不同。
缺点:当主体的数量较多时,配置和维护工作就会成本大、易出错。
自主访问控制,Discretionary Access Control,ACL的一种拓展。
原理:在ACL模型的基础上,允许主体可以将自己拥有的权限自主地授予其他主体,所以权限可以任意传递。
例如:常见于文件系统,LINUX等操作系统都提供DAC的支持。
缺点:对权限控制比较分散,例如无法简单地将一组文件设置统一的权限开放给指定的一群用户。主体的权限太大,无意间就可能泄露信息。
强制访问控制,Mandatory Access Control,MAC模型中主要的是双向验证机制。常见于机密机构或者其他等级观念强烈的行业,如军用和市政安全领域的软件。
原理:主体有一个权限标识,客体也有一个权限标识,而主体能否对该客体进行操作取决于双方的权限标识的关系。
例如:将军分为上将>中将>少将,军事文件保密等级分为绝密>机密>秘密,规定不同军衔仅能访问不同保密等级的文件,如少将只能访问秘密文件;当某一账号访问某一文件时,系统会验证账号的军衔,也验证文件的保密等级,当军衔和保密等级相对应时才可以访问。
缺点:控制太严格,实现工作量大,缺乏灵活性。
基于属性的访问控制,Attribute-Based Access Control,能很好地解决RBAC的缺点,在新增资源时容易维护。
原理:通过动态计算一个或一组属性是否满足某种机制来授权,是一种很灵活的权限模型,可以按需实现不同颗粒度的权限控制。
属性通常有四类:
主体属性,如用户年龄、性别等;
客体属性,如一篇文章等;
环境属性,即空间限制、时间限制、频度限制;
操作属性,即行为类型,如读写、只读等。
例如:早上9:00,11:00期间A、B两个部门一起以考生的身份考试,下午14:00,17:00期间A、B两个部门相互阅卷。
缺点:规则复杂,不易看出主体与客体之间的关系,实现非常难,现在应用的很少。
基于角色的权限访问控制,Role-Based Access Control。每个用户可以拥有多个角色,每个角色可以拥有多个权限。核心在于用户只和角色关联,而角色代表权限,是一系列权限的集合。基于角色的访问控制遵守最小特权,应该授予所需要的完成其任务的最小角色,这样可以防止用户干坏事。
RBAC三要素:
用户:系统中所有的账户
角色:一系列权限的集合(如:管理员,开发者,审计管理员等)
权限:菜单,按钮,数据的增删改查等详细权限。
在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。
角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系同样也存在继承关系防止越权。
优点:便于角色划分,更灵活的授权管理;最小颗粒度授权;
RBAC是一种用户-角色-权限的授权模型,RBAC模型可以分为:RBAC0基本模型、RBAC1角色的分层模型、RBAC2约束模型、RBAC3统一模型四个阶段,一般公司使用RBAC0的模型就可以。RBAC0相当于底层逻辑,后三者都是在RBAC0模型上的拔高。
用户和角色、角色和权限多对多关系。一个用户可以拥有多个角色,一个角色可以被多个用户拥有,用户和角色是多对多关系;同样角色和权限也是多对多关系。RBAC0模型如下图:
相对于RBAC0模型,增加角色分级的逻辑,类似于树形结构,引入角色继承概念,即下一节点继承上一节点的所有权限,如role1根节点下有role1.1和role1.2两个子节点
角色分级的逻辑可以有效的规范角色创建(主要得益于权限继承逻辑)。比如CRM系统有上下级职级概念(经理、主管、专员),如果采用RBAC0模型做权限系统,需要为经理、主管、专员分别创建角色(角色之间权限无继承性),极有可能出现一个问题,由于权限配置错误,主管拥有经理都没有权限。
而RBAC1模型就很好解决这个问题,创建完经理角色并配置好权限后,主管角色的权限继承经理角色的权限,并且支持针对性删减主管权限。
基于RBAC0模型,对角色增加更多约束条件,引入互斥角色的限制。还约束一个用户拥有的角色是有限的,一个角色拥有的权限是有限的,以及想要获取较高权限,首先需要拥有一个低级权限
如角色互斥,比较经典的案例是财务系统中出纳不得兼管稽核,则在赋予财务系统操作人员角色时,同一个操作员不能同时拥有出纳和稽核两个角色。
如角色数量限制,如:一个公司的CEO角色只能有1个。限制有多少用户能拥有这个角色。
RBAC2模型主要是为了增加角色赋予的限制条件,这也符合权限系统的目标:权责明确,系统使用安全、保密。
同样是基于RBAC0模型,但是综合RBAC1和RBAC2的所有特点。
RBAC权限模型由三大部分构成,即用户管理、角色管理、权限管理。
用户管理按照企业架构或业务线架构来划分,这些结构本身比较清晰,扩展性和可读性都非常好。
角色管理一定要在深入理解业务逻辑后再来设计,一般使用各部门真实的角色作为基础,再根据业务逻辑进行扩展。
权限管理是前两种管理的再加固,做太细容易太碎片,做太粗又不够安全,这里我们需要根据经验和实际情况来设计。
实现不够好的RBAC模型存在诸多问题,后期需要超管角色,项目的owner投入很大精力去维护:
文章浏览阅读1.2k次。 字面释义:UE(User Experience) : 用户体验 UI(User Interface) : 用户界面 UCD(User-Centered Design) :以用户为中心的设计 UED(User-Experience Design) :用户体验设计 UI(User Interface)即用户界面,也称人机界面。是指用户和某些系统进行交互方法的集_ued,ui,,ue区别
文章浏览阅读780次。Java接口自动化框架系列05:Web接口自动化Demo例子详细介绍1、提取到要测试的接口信息,并分析接口1.1、找到到你需要测试的接口,例如:新增角色,查询角色,删除角色例如:https://10.1.1.104/uim/doc.html1.1.1、新增角色接口地址:/uim/v1/role/add 请求方式:POST请求示例:{ "moduleName": "", "monitorEnabled": 0}响应示例:{ "code": 0, _java接口自动化案例
文章浏览阅读3.1w次,点赞73次,收藏667次。数字图像处理(四)—— 图像增强图像增强的定义图像增强方法一、图像增强的点运算(一)灰度变换1. 线性变换2. 分段线性变换3. 非线性灰度变换对数变换指数变换(二) 直方图修整法1. 直方图均衡化2. 直方图规定化二、图像的空间域平滑(一)局部平滑法1. 超限像素平滑法2. 灰度最相近的K个邻点平均法3. 最大均匀性平滑4. 有选择保边缘平滑法5. 空间低通滤波法6. 中值滤波三、图像空间域锐化(一)梯度锐化法Sobel 与 Prewitt 算子(二)Laplacian 增强算子(三)高通滤波法四、图像的_图像增强
文章浏览阅读1.9w次,点赞18次,收藏135次。1.deconfig 文件:一般由平台厂商提供,内核编译用做.config的参考,注意:如果,缺少该文件,无法进行编译。文件位于:/kernel/../arch/arm/configs/xxx_defconfig2.kconfig 分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make men_make menuconfig .config
文章浏览阅读3k次。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> table { _html增删行按钮
文章浏览阅读54次。# 迭代器(Iterator)&生成器(generator)# 若要对象可迭代:# 在python2中对象必须包含__iter__(self)和next(self)# 在python3中对象必须包含__iter__(self)和__next__(self)# 其中:__iter__(self)必须返回一个含有含有__next__(self)的对象,..._python iterator数据结构
文章浏览阅读5.1k次。物化视图虽然能够自动更新数据,但是会带来一些性能上的损失,尤其是在基础表数据量较大的情况下。因此,在设计物化视图时,需要考虑这个因素,同时选择合适的刷新机制来平衡性能和数据实时性的需求。当基础表有数据插入时,触发器会自动插入相应的数据到物化视图中。)是一种特殊的表,它能够在底层数据更新后,自动更新自己的数据。数据更新包括两个方面的变化:基础表的数据修改和基础表的数据新增。另外,我们也可以手动刷新物化视图,甚至可以使用一些定时手段,实时或定时去触发它。如果基础表的数据修改,物化视图会自动更新。_clickhouse 创建物化视图详解
文章浏览阅读6.7k次,点赞2次,收藏8次。redis+keepalivede主从高可用实操之前有写过redis+sentinel的哨兵机制主从的切换,这一次多了一个keepalived,是为了能够方便项目只支持一台访问,可是又要高可用的情况下,就可以执行此方案。本次主要讲的就是keepalived的配置,如何才能做到单台访问而实现高可用!_redis多台keepalived
文章浏览阅读1.4k次,点赞2次,收藏13次。这是一篇译文,译文首发于 事件驱动架构设计,转载请注明出处!这篇文章是 软件架构演进 一个有关 软件架构 系列文章中的一篇。这些文章,主要是我学习软件架构、对软件架构的思考及使用方法的记录。相比于这个系列的前几篇文章,本篇文章可能看来更有意义。采用设计驱动开发应用程序的实践,可以追溯到 1980 年左右。我们可以在前端或者后端采用事件..._事件框架的设计
文章浏览阅读4.2k次。//============================================================================// Name : wgb.cpp// Author : wgb// Version :// Copyright : Your copyright notice// Description : He_read pcd failed
文章浏览阅读591次。安装cnpmnpm install -g cnpm查看镜像地址npm get registry https://registry.npmjs.org/更换镜像地址为淘宝的npm config set registry http://registry.npm.taobao.org/或者一步完成npm install -g cnpm --registry=https://registry.npm.taobao.org使用cnpm安装vue-clicnpm install -g @v_如何注册cnpm
文章浏览阅读4.2k次。日期格式时间格式代码<template> <u-form :model="form" ref="uForm"> <u-form-item :label-position="labelPosition" label="日期" prop="patrolDate" label-width="150"> <u-input :border="border" placeholder="请选择日期" v-model="form.patrolDate" typ