首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

[PHP] RBAC权限与审批流的简单数据库构想

2023-11-13 来源:花图问答

-----------------|id |-----------------|name |-----------------user(用户)-----------------|id |-----------------|name |-----------------node(菜单按钮节点)-----------------|id |-----------------|name |-----------------|module_name |-----------------|action_name |-----------------|pid |-----------------|sort |-----------------user_role(用户-角色表,功能权限)-----------------|id |-----------------|user_id |-----------------|role_id |-----------------node_role(节点-角色表,功能权限)-----------------|id |-----------------|role_id |-----------------|node_id |-----------------user_channel(用户-频道表,数据范围权限,多对多)-----------------|id |-----------------|user_id |-----------------|channel_id |-----------------flow(流程设置表,频道对应的多级审批角色,一对多)-----------------|id |-----------------|channel_id |-----------------|role_id |-----------------|level |-----------------process(审核流程表,需分表)-----------------|id |-----------------|document_id |-----------------|author_id |-----------------|pre_checkerid |-----------------|checker_id |-----------------|next_role_id |-----------------|check_status |-----------------

审批流类似一个链表

审批流设置表可以配置某个频道的审批层级

[PHP] RBAC权限与审批流的简单数据库构想

标签:界面   用户   nod   cti   php   配置   一对多   class   author   

小编还为您整理了以下内容,可能对您也有帮助:

ThinkPHP:根据不同权限显示不同内容,该如何实现呢?

你说的这个问题就是thinkphp中的Rbac用户权限问题,需要在数据库中建立多张表来实现(这是最重要的一步)。先来说一下总的思路:

首先、用户登陆时候验证用户存在之后把用户的id存入session之中,之后在common类(这个类是继承的action类,之后其他要用到权

限的类来继承common类)中,使用_initialize()方法(继承这个类的首先都要初始化这个方法,通过这个方法,可以达到用户权限的判断)。

之后、读取所用的节点,并且根据用户的id读取出用户所属组(role),之后再根据用户组取出权限表中的节点,最后用in_array()来判断用户是否有这个节点(栏目)如果有则显示(读取出来的节点),没有则unset()方法

删除。这样实现了,比较简单的方法是使用官方的类库解决!

下面再补充几个重要的步骤:

建表:到thinkphp中的ORG/Util/RBAC.class.php中之后里面有建数据库表的代码(文件开头部分就有)。有四个表(节点表(node),用户所属组表(role),权限表(acces),用户角色表(role_user))。创建四张表但是‘用户表’要自己建(总共有五张表),最后添加数据就是了。

可能说的很空洞,最好的还是去官网看点视频之后在看这个,或者相关的说明就懂了。说的不是很清楚,但是希望能给你指导一个方向吧。也为了能帮到更多初学者和鼓励自己学习更多来帮助到更多的人,我也开通了百度空间(地址:hi.baidu.com/flyxiangshang)。也希望大家能多多支持。很多事情不是你做不做,最重要的是你能坚持多久。向上吧!

thinkphp的auth权限和rbac有什么区别

相同点:

1.两种都是基于角色权限控制

2.都是同一个用户可属于多个角色或用户组

不同点:

Rbac:

1.Rbac是基于节点控制,根据3级节点,mole,controller,action,节点类似与树形结构,3级节点间相互有关联

2.表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表

3.根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作

Auth:

1.Auth是基于规则控制,定制规则和条件表达式 ,每一条规则都是的

2.表关系:用户表->用户和用户组关联表->用户组表->规则表

3.根据规则控制,可自由定制不同的规则,非常自由,同一个规则内可以定制多个不同节点(中间的关系:OR AND)

4.可定制规则表达式,比如定制积分表达式

想法和问题:

Auth:

1.Auth验证多条规则时条件表达式不起效果

2.Auth官方例子只说一个根据积分的规则,假如我规则"Admin/Goods/goodsList,Admin/Goods/goodsDel"我能不能定义这里面的某些ID所属角色操作权限的规则表达式,而这些所属角色id是goods表里的某个字段,可能所属的角色是多个不同的角色?

3.Auth不支持"Admin/*"泛解析,因为他每一条规则都是的

4.对菜单,页面,按钮类的显示使用Auth会必Rbac更好更方便

Rbac:

1.新手配置Rbac的时候经常出现 Rbac $_SESSION['_access_list'] 获取不到的问题,因为Rbac是使用ThinkPHP的底层DB引擎DSN连接数据库,需要配置数据库链接和5个表的关系,字段名和表名不能出现问题

2.允许完成"Admin/*"类型的泛解析,比如这里直接定制一个Admin模块的节点,不要下级节点就可以了

通用:

1.不管是Rbac的角色表或者Auth里面的用户组表也好,都可以扩展,比如对角色或用户组进行多层分级

2.Rbac的节点和Auth的规则都可以进行分级,比如前端功能权限,后端功能权限,后端某个功能模块权限等等

3.上面两个东西都不能应用到权限管控之中去,比如Rbac不能分享上级角色权限,Auth用户组也不能,但是能更好的管理和更加流程化的操作.

2022-04-27业务流、工作流和审批流

一、什么是流

随着社会生产力的发展和生产关系性质的变化,人类社会的生产活动开始出现社会分工,个人、企业、甚至是国家都只是完整生产活动中的一环。

社会分工的出现,导致一次完整的生产活动需要由多国家、多企业、多部门、多个人(后文用“人”代指)互相配合、共同完成。

在这种分工的生产活动中,处于后置环节的“人”,对前置环节的“人”的输出物有着内在需求,正是因为这种内在需求,导致了输出物的流动,使输出物从供应方转向需求方,即“流”,也称“流程”。

“流”具有流动性和指向性两个特征。

在当今社会的生产活动中,“流”具体表现有物流、信息流、工作流、资金流等。

二、什么是业务流、工作流、审批流

业务流: 即业务流程,指为了完成某项业务而进行的各种工作的有序组合

工作流: 即工作流程,指为了完成某项工作而进行的各种动作的有序组合

审批流: 即审批流程,是对某项工作的审批活动的有序组合

通常情况下,业务流与工作流是相同的概念,本文即持此观点,后文重点讲解工作流、审批流。

审批流属于工作流的范畴。

三、工作流详解

一项完整的工作流程,应包括流程定义、权限划分两个部分,见如下泳道图:

合同签订的流程从开始到结束,共需要经过5个环节,涉及三个岗位。

1. 流程定义

流程定义的目的,是为了将工作分解并确定分解后的事项先后顺序。

1)工作流程

一个工作流具体包含哪些流程环节以及各环节之间的先后顺序。

比如上图的合同工作流程,包含合同立项-合同签订-合同验收-合同付款-归档五个环节。

合同立项的后置环节是合同签订,以此类推。

在具体开发时,各环节及顺序可以系统内写死也可以自由配置,具体视业务变动频率及开发资源确定。

2)表单设计

即本环节内,应该确定、处理什么内容。

比如合同立项环节,业务人员需要确定并填写合同的甲乙方、立项时间、立项金额等内容。

那么立项表单设计时,就要包含上述的字段信息。

简单的工作流: 各环节之间无分支条件,无流程跨越

复杂的工作流: 要考虑各环节之间的分支条件,比如满足条件A,走流程1,否则走流程2等,还有环节间的退回情况等

2. 权限的划分

权限划分的目的,是为了确定事项责任归属,即由 谁 做什么 操作 。

权限包含功能权限、数据权限、字段权限。

1)功能权限

即用户能看到哪些菜单,能进行什么操作(按钮)。

比如同是合同岗,员工A只有立项权限,无合同签订权限,员工B只有签订权限无立项权限。

2)数据权限

即用户能查看或操作的数据范围,只能查看或操作授权内的数据。

比如员工A只能查看本部门的合同,员工B可以查看全公司的合同。

3)字段权限

即用户能查看或操作的数据字段,只能查看或操作授权内的字段。

比如员工A不可查看合同的立项金额字段,员工B可以查看合同所有字段。

具体权限的设计,需要根据各业务特性及需求来确定。

权限设计参考RBAC权限模型,本文不再赘述。

四、审批流详解

审批流是属于工作流的一个组成部分,所以审批流的设计与工作流基本相似。

还是以合同流程讲解,如下流程:

假设合同立项、合同签订、合同付款均需审批,审批通过后才可进入下一环节。

每个环节的审批人可以是多人,也可以是单人,可以是多人串行审批,也可以是多人并行审批等等。

1. 审批流的触发条件

1)必须审批

指不管当前操作人的权限,环节提交后均需审批。

比如合同立项,提交后必须立项审批。

2)权限外审批

根据当前操作人的权限,若在其权限内,则无需审批并直接进入下一个环节,否则需审批。

比如合同立项,如果立项人员的立项权限是20万,合同立项金额低于20万则直接进入合同签订环节,否则进入立项审批环节。

2022-04-27业务流、工作流和审批流

一、什么是流

随着社会生产力的发展和生产关系性质的变化,人类社会的生产活动开始出现社会分工,个人、企业、甚至是国家都只是完整生产活动中的一环。

社会分工的出现,导致一次完整的生产活动需要由多国家、多企业、多部门、多个人(后文用“人”代指)互相配合、共同完成。

在这种分工的生产活动中,处于后置环节的“人”,对前置环节的“人”的输出物有着内在需求,正是因为这种内在需求,导致了输出物的流动,使输出物从供应方转向需求方,即“流”,也称“流程”。

“流”具有流动性和指向性两个特征。

在当今社会的生产活动中,“流”具体表现有物流、信息流、工作流、资金流等。

二、什么是业务流、工作流、审批流

业务流: 即业务流程,指为了完成某项业务而进行的各种工作的有序组合

工作流: 即工作流程,指为了完成某项工作而进行的各种动作的有序组合

审批流: 即审批流程,是对某项工作的审批活动的有序组合

通常情况下,业务流与工作流是相同的概念,本文即持此观点,后文重点讲解工作流、审批流。

审批流属于工作流的范畴。

三、工作流详解

一项完整的工作流程,应包括流程定义、权限划分两个部分,见如下泳道图:

合同签订的流程从开始到结束,共需要经过5个环节,涉及三个岗位。

1. 流程定义

流程定义的目的,是为了将工作分解并确定分解后的事项先后顺序。

1)工作流程

一个工作流具体包含哪些流程环节以及各环节之间的先后顺序。

比如上图的合同工作流程,包含合同立项-合同签订-合同验收-合同付款-归档五个环节。

合同立项的后置环节是合同签订,以此类推。

在具体开发时,各环节及顺序可以系统内写死也可以自由配置,具体视业务变动频率及开发资源确定。

2)表单设计

即本环节内,应该确定、处理什么内容。

比如合同立项环节,业务人员需要确定并填写合同的甲乙方、立项时间、立项金额等内容。

那么立项表单设计时,就要包含上述的字段信息。

简单的工作流: 各环节之间无分支条件,无流程跨越

复杂的工作流: 要考虑各环节之间的分支条件,比如满足条件A,走流程1,否则走流程2等,还有环节间的退回情况等

2. 权限的划分

权限划分的目的,是为了确定事项责任归属,即由 谁 做什么 操作 。

权限包含功能权限、数据权限、字段权限。

1)功能权限

即用户能看到哪些菜单,能进行什么操作(按钮)。

比如同是合同岗,员工A只有立项权限,无合同签订权限,员工B只有签订权限无立项权限。

2)数据权限

即用户能查看或操作的数据范围,只能查看或操作授权内的数据。

比如员工A只能查看本部门的合同,员工B可以查看全公司的合同。

3)字段权限

即用户能查看或操作的数据字段,只能查看或操作授权内的字段。

比如员工A不可查看合同的立项金额字段,员工B可以查看合同所有字段。

具体权限的设计,需要根据各业务特性及需求来确定。

权限设计参考RBAC权限模型,本文不再赘述。

四、审批流详解

审批流是属于工作流的一个组成部分,所以审批流的设计与工作流基本相似。

还是以合同流程讲解,如下流程:

假设合同立项、合同签订、合同付款均需审批,审批通过后才可进入下一环节。

每个环节的审批人可以是多人,也可以是单人,可以是多人串行审批,也可以是多人并行审批等等。

1. 审批流的触发条件

1)必须审批

指不管当前操作人的权限,环节提交后均需审批。

比如合同立项,提交后必须立项审批。

2)权限外审批

根据当前操作人的权限,若在其权限内,则无需审批并直接进入下一个环节,否则需审批。

比如合同立项,如果立项人员的立项权限是20万,合同立项金额低于20万则直接进入合同签订环节,否则进入立项审批环节。

低代码开发的未来发展如何?

2023年,从业者对低代码的发展充满了想象,人们认为,未来低代码的商业价值不可估量。

此话并非空穴来风。据Gartner的最新报告显示,到2023年,超过70%的企业将采用低代码作为他们发展战略的关键目标之一;到2025年,整体低代码开发平台市场规模将达到290亿美元,年复合增长率超过20%;

不仅如此,Gartner高级市场研究专家Varsha Mehta还预测:“企业组织越来越多地转向低代码开发技术,以满足对快速应用交付和高度定制的自动化工作流程不断增长的需求。”

这意味着,2023年,低代码或迎来高速增长。

低代码平台有什么用?

简要概述,低代码开发是一种允许开发人员使用可视化拖拽组件而不是编写代码行来构建应用的方法。

使用低代码,开发团队可以用最少的代码快速创建和部署应用程序,从而使开发人员能够专注于更复杂和创造性的任务。同时,也使得编码经验很少或没有的人更容易构建应用程序,减少了开发所需的时间和资源。

一定意义来低代码可以缓解熟练开发人员短缺和数字化转型需求增加带来的市场现状。

国内主流低代码介绍!

关于低代码,在一些“业务逻辑复杂且非常易变,但单业务功能的逻辑复杂度不是很高”的场景下,JNPF快速开发平台是这类业务系统的提效利器,如审批流管理、营销活动搭建、项目协同管理等,它都具备优秀的灵活性。

    采用最新主流前后分离框架(SpringBoot+Mybatis-plus+Vue),容易上手;代码生成器依赖性低,灵活的扩展能力,可灵活实现二次开发;

    开发效率高,采用代码生成器,单表数据模型和一对多 (父子表)、树列表等数据模型,增删改查功能自动生成,前端代码和后端代码都一键生成;

    封装完善的用户、角色、菜单、组织机构、数据字典、在线定时任务等基础功能。强大的权限机制,支持访问授权、按钮权限、数据权限、表单权限等

    零代码在线开发能力,在线配置表单、在线配置报表、在线配置图表、在线设计表单

    常用共通封装,各种工具类 (定时任务,短信接口,邮件发送,Excel 导入导出等), 基本满足 80% 项目需求

    集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成图形报表、excel、word 等报表;

    采用前后分离技术,页面 UI 精美,针对常用组件做了封装:时间、行表格控件、报表组件,编辑器等等

    数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段)

    在线配置报表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据等报表)

    表单设计器,支持用户自定义表单布局,支持单表,一对多表单

    消息中心(支持短信、邮件、企微、钉钉、Webhook配置等等)

    支持多种数据库:支持MySQL、SQL Server、Oracle、PostgreSQL、达梦数据库、*金仓数据库等,您无需关心不同类型数据库间的语法区别

    IM系统同时兼容PC端、手机客户端App、微信小程序等多种平台,PC端+移动端伴您解决企业工作后顾之忧;

    支持多语言,提供国际化方案;

    平台首页风格,提供多种组合模式,支持自定义风格

    权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制),限能控制到菜单、按钮、数据列与约束条件,授权范围等;

    支持二次开发:丰富的现成应用,满足企业不断变化的业务、管理需求,基于平台开发的产品更稳定可靠、代码规范、易学上手快等,可全方位实现商业拓展

低代码开发的未来发展如何?

2023年,从业者对低代码的发展充满了想象,人们认为,未来低代码的商业价值不可估量。

此话并非空穴来风。据Gartner的最新报告显示,到2023年,超过70%的企业将采用低代码作为他们发展战略的关键目标之一;到2025年,整体低代码开发平台市场规模将达到290亿美元,年复合增长率超过20%;

不仅如此,Gartner高级市场研究专家Varsha Mehta还预测:“企业组织越来越多地转向低代码开发技术,以满足对快速应用交付和高度定制的自动化工作流程不断增长的需求。”

这意味着,2023年,低代码或迎来高速增长。

低代码平台有什么用?

简要概述,低代码开发是一种允许开发人员使用可视化拖拽组件而不是编写代码行来构建应用的方法。

使用低代码,开发团队可以用最少的代码快速创建和部署应用程序,从而使开发人员能够专注于更复杂和创造性的任务。同时,也使得编码经验很少或没有的人更容易构建应用程序,减少了开发所需的时间和资源。

一定意义来低代码可以缓解熟练开发人员短缺和数字化转型需求增加带来的市场现状。

国内主流低代码介绍!

关于低代码,在一些“业务逻辑复杂且非常易变,但单业务功能的逻辑复杂度不是很高”的场景下,JNPF快速开发平台是这类业务系统的提效利器,如审批流管理、营销活动搭建、项目协同管理等,它都具备优秀的灵活性。

    采用最新主流前后分离框架(SpringBoot+Mybatis-plus+Vue),容易上手;代码生成器依赖性低,灵活的扩展能力,可灵活实现二次开发;

    开发效率高,采用代码生成器,单表数据模型和一对多 (父子表)、树列表等数据模型,增删改查功能自动生成,前端代码和后端代码都一键生成;

    封装完善的用户、角色、菜单、组织机构、数据字典、在线定时任务等基础功能。强大的权限机制,支持访问授权、按钮权限、数据权限、表单权限等

    零代码在线开发能力,在线配置表单、在线配置报表、在线配置图表、在线设计表单

    常用共通封装,各种工具类 (定时任务,短信接口,邮件发送,Excel 导入导出等), 基本满足 80% 项目需求

    集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成图形报表、excel、word 等报表;

    采用前后分离技术,页面 UI 精美,针对常用组件做了封装:时间、行表格控件、报表组件,编辑器等等

    数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段)

    在线配置报表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据等报表)

    表单设计器,支持用户自定义表单布局,支持单表,一对多表单

    消息中心(支持短信、邮件、企微、钉钉、Webhook配置等等)

    支持多种数据库:支持MySQL、SQL Server、Oracle、PostgreSQL、达梦数据库、*金仓数据库等,您无需关心不同类型数据库间的语法区别

    IM系统同时兼容PC端、手机客户端App、微信小程序等多种平台,PC端+移动端伴您解决企业工作后顾之忧;

    支持多语言,提供国际化方案;

    平台首页风格,提供多种组合模式,支持自定义风格

    权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制),限能控制到菜单、按钮、数据列与约束条件,授权范围等;

    支持二次开发:丰富的现成应用,满足企业不断变化的业务、管理需求,基于平台开发的产品更稳定可靠、代码规范、易学上手快等,可全方位实现商业拓展

工作的时候突然很想要怎么办(拆解权限系统和工作流)

在B端产品从0到1设计的过程中,有一些基础内容是绕不开的,比如人员系统、账号系统、权限系统、工作流系统等等。但是这些系统也相对成熟,可以玩出花的地方也不多,对于这部分我们倒可以占据后发优势,去学习行业内的产品是怎么做的。

这里给大家提供一个思路,SaaS的产品经理可以试着从非竞品找到设计灵感。我们这篇文章主要聊一下权限系统和工作流,单从这两个通用模块来看,感觉OA系统有比较不错的心得。我们以钉钉为例做一个权限系统和工作流部分的拆解,也算对平时工作的一个总结。

01 权限系统,RBAC(Role-Based Access Control)

权限系统可以从字面上理解,赋予不同用户不同的权限,比如管理员可以增删账户,普通员工只能读写数据。常规权限系统设计会用到RBAC模型,基于角色的访问控制模型。在没用到这个RBAC模型的情况下,用户会和权限直接绑定。

(用户-权限)

这个对于简单系统是非常易懂的,对于人员变动不大的系统也是可以直接上手使用的。但是当有人员变动或者权限变动的时候,问题就出来了。以上图为例,小路离职,索大升职,享有小路的全部权利,这个时候会产生比较大的变动。而根据RBAC,那么就会有三层结构,用户-角色-权限。通过升维解决低维灵活度不够的问题。RBAC会是下面这个样子。

(用户-角色-权限)

小路可以是管理员,也可以是组长,然后小路具有管理员和组长的所有权限。如果小路离职了的话,索大可以和管理员进行绑定,再和组长绑定。这时候角色和权限的关系是不需要改变的。

RBAC还有很多的变体,比如互斥角色、比如角色具有上下级关系,可以参考《RBAC权限系统分析、设计与实现》这个博客。

我们看看钉钉的实现方式。

(钉钉子管理员列表页面)

(钉钉子管理员添加人员页面)

这是钉钉后台的管理系统,在子管理员页面里会有添加管理组,添加管理组人员,设定管理组的管理员,设置权限等。管理组会有一些默认的管理组,也可以由用户新增。操作顺序可以是:

(钉钉子管理员页面流程)

钉钉产品已经非常庞大了,作为一个平台产品,这边的权限主要是针对不同应用的访问和使用。钉钉的管理组就像一个角色,而成员就代表着用户,最后为角色配置权限。引入角色对用户和权限进行解耦的好处是,任何员工的离职入职,都不会影响到角色和权限直接的关系。而管理要做的,只是把人丢到对应的管理组即可。

钉钉对于这部分的管理是一步到位的,完成了用户-角色-权限的配置。如果想要条理更清晰一些,可以先完成角色和权限的映射配置,再往角色里添加人员就可以了。

除了用户- 角色- 权限这种形式,还可能出现更为复杂的问题。

比如权限的冲突,小路有两个角色,一个角色是管理员,一个角色是组长,组长有开除员工的权限,管理员没有开除员工的权限,那么小路最后应不应该有开除员工的权限?

这里可以考虑给角色加上优先级,出现冲突了以优先级高的角色所对应的权限为主。

再比如,角色组的问题。一个角色可以对应分配权限,而由角色构成的集合应该也可以被分配权限。如下图:

(用户-角色-权限,用户-角色组-权限)

举个例子:

用户:小路、小山、索大角色:项目经理、前端工程师、产品经理角色组:钉钉项目组权限:项目进度管理、项目组聊天窗、产品原型设计、产品开发

钉钉项目组作为角色组,可以由项目经理、前端工程师、产品经理这几个角色组成,角色组有自己的权限,角色也有自己的权限,用户还是和角色绑定,用在角色组里会有角色组的对应的权限,也会有角色对应的权限。

这里基于用户-角色-权限这个父类可以派生出很多子类。这部分角色没有处理好的话,很可能会影响到第二部分说的工作流,钉钉在这里设计的相对完善。

02 工作流,BPM(Business Process Management)

工作流也可以划分为五个阶段,分别是:

业务流程发掘(Business Process Discovery)业务流程设计(Business Process Design)业务流程执行(Business Process Execution)业务流程管理维护(Business Process Administration)业务流程最优化(Business Process Optimization)

我们产品里常用到的是申请和审批,属于业务流程的设计。

工作流里所涉及到的角色有:申请发起人、审批人、抄送人、执行人。

根据业务情况还会涉及到条件分支,比如报销金额超过100W,需要总经理批,低于1000元,上级领导批就可以;请假时间超过30天需要人力主管批,低于3天直线主管批就可以等等。

我们看一下钉钉的工作流。钉钉的工作流是通过可视化编程做的,其实和之前说的低代码属于同一类产品,钉钉的工作流设计和低代码平台氚云、明道云等等非常像。对于钉钉布局低代码也可以从这看到必然。

(钉钉工作流页面)

(钉钉工作流添加节点页面)

钉钉的设计,是可以动态添加审批、抄送、执行、分支节点的。这个按字面意思大家应该能理解。其实我想说的是,在设计流程的时候有一个非常重要的原则。就是流程的复用性。

来看一个问题。

比如,小路是研发部一部的员工,小山是研发部二部的员工,索大是研发部三部的员工,三个部门是平行部门,他们各自领导不一样。那么小路,小山,索大三个人的请假流程应该怎么设计?

这里会用到我们说的流程复用性的原则,三个人部门平行,即使三个人领导不同,审批他们的人不同,但是三个人应该是共享一套流程的。可能是:发起人—>直线领导—>HR—>结束。所以在流程设计的时候要想实现流程的复用,其实并不是一件简单的事情。

钉钉给出的设计思路其实是比较接地气也能解决问题的,大家也可以对比看看企业微信,两家产品在审批人选择这部分交互是比较类似。我们具体来看一下。

指定人员:指定具体的人,钉钉*了20个人。这部分要慎用,一旦流程指定到具体的人,一个是复用性变差,第二是一旦有人离职,容易造成流程的崩溃。发起人自选:在发起人提交申请时,自行选择一个人批复。这种情况很适用于请假半天,需要有人知道就好的情况,不是很重要的申请可以这么设计。连续多级主管:这个功能比较好用,也可以直观理解。小路是一个研发工程师,小山是下路领导,索大是小山领导。当选择多级主管的时候,级数选择2,那么下路的申请会顺着report line一直到索大那边。部门主管:指定某个部门的领导,比如请假要指定到HR主管,报销要指定到财务主管。直属主管:指定到个人的直接上级。表单内部门控件对应主管,表单内部门控件对应角色:这里我放在一起说,这部分功能是比较处理复杂情况的时候需要用的,比如表单内部门控件对应角色,小路是研发部一部的*,小山是研发部的前端工程师,索大是研发部产品经理。但是部门有一个助理角色,帮助*处理事务的,这个助理不是岗位,是角色。索大是研发部一部的助理。所以当要指定到角色的时候,就可以通过表单内部门空间对应角色指定到一个虚拟的角色,而不是实际的岗位。这边比较绕,而且没有特别好的描述。所以我说钉钉这块比较接地气,但是很能解决一些实际需求。角色:虚拟设置的角色,供指定,指定角色的好处,和前文说的RBCA是一样的,角色是一个抽象,可以带来更好的拓展性和灵活性。发起人自己:这个没什么好说的,可能表单流转过程会有某个时刻需要流回自己手里。表单内的联系人:这个也是一个灵活性比较高的功能,是指表单内有控件出现了联系人,在这个位置可以选为当前节点的执行人。

这一块对比下来,钉钉思考的情况比较全面,所以这部分内容对于需要设计流程的B端产品来说,是非常好的学习案例。

自己做了一些流程的工作,这里说说感受。

因为要把定义流程的工作交给用户,那么用户可能会设计出现各种奇奇怪怪的业务流程,而B端产品要能支持这些流程,一定是要有非常高的灵活度和非常极致的抽象。

所以这部分内容其实考验产品经理的三个能力:对于业务需求的抽象能力、对于产品落地交互的具象能力,以及咨询里说的MECE熟练度。而市面上做的好的产品是提供了落地实现的,这也是能节约我们大量时间的环节。

啰嗦一句,就是借鉴的过程,需要弄清原产品背后的逻辑。比如钉钉里的选择人员,为什么要给这么多选项,我们自己的产品需不需要这么多选项?这些都是要自己思考清楚的。

03 权限系统和工作流存在要素重叠

把权限系统和工作流放在一起写,是因为二者会有一些重叠关系。认真看文章的小伙伴应该发现了,角色这个词是贯穿这两部分的。我们看看如果一个B端产品,需要从0到1设计这两部分会是怎样?

(权限系统-工作流的设计流程)

我们创建的角色,可以作为权限系统里去分配权限,也可以在工作流里作为审批的执行人。角色本质是一层抽象,抽象的好处就在于能够解耦用户和权限,解耦用户和审批人。抽象会带来更多的复用性。

04 最后

B端产品在设计权限和工作流的时候,非常建议大家去看看钉钉、企微这些OA系统。审视OA产品,会发现OA系统对于权限,角色,工作流,玩的很明白,是非常好的学习方向。

飞书的审批功能目前看起来比企微和钉钉的审批要弱化一些,这和产品定位也有一些关系,飞书强在效率提升,钉钉强在办公管理,企微强在关系链接,产品的基因会决定产品功能。

但是相信有钉钉、企微的先行探索,飞书也是能快速赶上的,毕竟存在后发优势。

现在SaaS是一个很火的领域,C端产品从0到1的设计产品的机会越来越稀少,SaaS的产品经理会有更多机会能够从0到1设计产品。在这个过程中,工作流和权限系统几乎不可或缺。

大家之后工作中,可以借鉴这些做的比较成功的产品,看看这些甚至连间接竞品都算不上的产品,学习他们的强势,发挥自己的后发优势,节约时间去更快的迭代产品。

本文由 @忙里偷贤 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自 Unsplash,基于CC0协议

工作的时候突然很想要怎么办(拆解权限系统和工作流)

在B端产品从0到1设计的过程中,有一些基础内容是绕不开的,比如人员系统、账号系统、权限系统、工作流系统等等。但是这些系统也相对成熟,可以玩出花的地方也不多,对于这部分我们倒可以占据后发优势,去学习行业内的产品是怎么做的。

这里给大家提供一个思路,SaaS的产品经理可以试着从非竞品找到设计灵感。我们这篇文章主要聊一下权限系统和工作流,单从这两个通用模块来看,感觉OA系统有比较不错的心得。我们以钉钉为例做一个权限系统和工作流部分的拆解,也算对平时工作的一个总结。

01 权限系统,RBAC(Role-Based Access Control)

权限系统可以从字面上理解,赋予不同用户不同的权限,比如管理员可以增删账户,普通员工只能读写数据。常规权限系统设计会用到RBAC模型,基于角色的访问控制模型。在没用到这个RBAC模型的情况下,用户会和权限直接绑定。

(用户-权限)

这个对于简单系统是非常易懂的,对于人员变动不大的系统也是可以直接上手使用的。但是当有人员变动或者权限变动的时候,问题就出来了。以上图为例,小路离职,索大升职,享有小路的全部权利,这个时候会产生比较大的变动。而根据RBAC,那么就会有三层结构,用户-角色-权限。通过升维解决低维灵活度不够的问题。RBAC会是下面这个样子。

(用户-角色-权限)

小路可以是管理员,也可以是组长,然后小路具有管理员和组长的所有权限。如果小路离职了的话,索大可以和管理员进行绑定,再和组长绑定。这时候角色和权限的关系是不需要改变的。

RBAC还有很多的变体,比如互斥角色、比如角色具有上下级关系,可以参考《RBAC权限系统分析、设计与实现》这个博客。

我们看看钉钉的实现方式。

(钉钉子管理员列表页面)

(钉钉子管理员添加人员页面)

这是钉钉后台的管理系统,在子管理员页面里会有添加管理组,添加管理组人员,设定管理组的管理员,设置权限等。管理组会有一些默认的管理组,也可以由用户新增。操作顺序可以是:

(钉钉子管理员页面流程)

钉钉产品已经非常庞大了,作为一个平台产品,这边的权限主要是针对不同应用的访问和使用。钉钉的管理组就像一个角色,而成员就代表着用户,最后为角色配置权限。引入角色对用户和权限进行解耦的好处是,任何员工的离职入职,都不会影响到角色和权限直接的关系。而管理要做的,只是把人丢到对应的管理组即可。

钉钉对于这部分的管理是一步到位的,完成了用户-角色-权限的配置。如果想要条理更清晰一些,可以先完成角色和权限的映射配置,再往角色里添加人员就可以了。

除了用户- 角色- 权限这种形式,还可能出现更为复杂的问题。

比如权限的冲突,小路有两个角色,一个角色是管理员,一个角色是组长,组长有开除员工的权限,管理员没有开除员工的权限,那么小路最后应不应该有开除员工的权限?

这里可以考虑给角色加上优先级,出现冲突了以优先级高的角色所对应的权限为主。

再比如,角色组的问题。一个角色可以对应分配权限,而由角色构成的集合应该也可以被分配权限。如下图:

(用户-角色-权限,用户-角色组-权限)

举个例子:

用户:小路、小山、索大角色:项目经理、前端工程师、产品经理角色组:钉钉项目组权限:项目进度管理、项目组聊天窗、产品原型设计、产品开发

钉钉项目组作为角色组,可以由项目经理、前端工程师、产品经理这几个角色组成,角色组有自己的权限,角色也有自己的权限,用户还是和角色绑定,用在角色组里会有角色组的对应的权限,也会有角色对应的权限。

这里基于用户-角色-权限这个父类可以派生出很多子类。这部分角色没有处理好的话,很可能会影响到第二部分说的工作流,钉钉在这里设计的相对完善。

02 工作流,BPM(Business Process Management)

工作流也可以划分为五个阶段,分别是:

业务流程发掘(Business Process Discovery)业务流程设计(Business Process Design)业务流程执行(Business Process Execution)业务流程管理维护(Business Process Administration)业务流程最优化(Business Process Optimization)

我们产品里常用到的是申请和审批,属于业务流程的设计。

工作流里所涉及到的角色有:申请发起人、审批人、抄送人、执行人。

根据业务情况还会涉及到条件分支,比如报销金额超过100W,需要总经理批,低于1000元,上级领导批就可以;请假时间超过30天需要人力主管批,低于3天直线主管批就可以等等。

我们看一下钉钉的工作流。钉钉的工作流是通过可视化编程做的,其实和之前说的低代码属于同一类产品,钉钉的工作流设计和低代码平台氚云、明道云等等非常像。对于钉钉布局低代码也可以从这看到必然。

(钉钉工作流页面)

(钉钉工作流添加节点页面)

钉钉的设计,是可以动态添加审批、抄送、执行、分支节点的。这个按字面意思大家应该能理解。其实我想说的是,在设计流程的时候有一个非常重要的原则。就是流程的复用性。

来看一个问题。

比如,小路是研发部一部的员工,小山是研发部二部的员工,索大是研发部三部的员工,三个部门是平行部门,他们各自领导不一样。那么小路,小山,索大三个人的请假流程应该怎么设计?

这里会用到我们说的流程复用性的原则,三个人部门平行,即使三个人领导不同,审批他们的人不同,但是三个人应该是共享一套流程的。可能是:发起人—>直线领导—>HR—>结束。所以在流程设计的时候要想实现流程的复用,其实并不是一件简单的事情。

钉钉给出的设计思路其实是比较接地气也能解决问题的,大家也可以对比看看企业微信,两家产品在审批人选择这部分交互是比较类似。我们具体来看一下。

指定人员:指定具体的人,钉钉*了20个人。这部分要慎用,一旦流程指定到具体的人,一个是复用性变差,第二是一旦有人离职,容易造成流程的崩溃。发起人自选:在发起人提交申请时,自行选择一个人批复。这种情况很适用于请假半天,需要有人知道就好的情况,不是很重要的申请可以这么设计。连续多级主管:这个功能比较好用,也可以直观理解。小路是一个研发工程师,小山是下路领导,索大是小山领导。当选择多级主管的时候,级数选择2,那么下路的申请会顺着report line一直到索大那边。部门主管:指定某个部门的领导,比如请假要指定到HR主管,报销要指定到财务主管。直属主管:指定到个人的直接上级。表单内部门控件对应主管,表单内部门控件对应角色:这里我放在一起说,这部分功能是比较处理复杂情况的时候需要用的,比如表单内部门控件对应角色,小路是研发部一部的*,小山是研发部的前端工程师,索大是研发部产品经理。但是部门有一个助理角色,帮助*处理事务的,这个助理不是岗位,是角色。索大是研发部一部的助理。所以当要指定到角色的时候,就可以通过表单内部门空间对应角色指定到一个虚拟的角色,而不是实际的岗位。这边比较绕,而且没有特别好的描述。所以我说钉钉这块比较接地气,但是很能解决一些实际需求。角色:虚拟设置的角色,供指定,指定角色的好处,和前文说的RBCA是一样的,角色是一个抽象,可以带来更好的拓展性和灵活性。发起人自己:这个没什么好说的,可能表单流转过程会有某个时刻需要流回自己手里。表单内的联系人:这个也是一个灵活性比较高的功能,是指表单内有控件出现了联系人,在这个位置可以选为当前节点的执行人。

这一块对比下来,钉钉思考的情况比较全面,所以这部分内容对于需要设计流程的B端产品来说,是非常好的学习案例。

自己做了一些流程的工作,这里说说感受。

因为要把定义流程的工作交给用户,那么用户可能会设计出现各种奇奇怪怪的业务流程,而B端产品要能支持这些流程,一定是要有非常高的灵活度和非常极致的抽象。

所以这部分内容其实考验产品经理的三个能力:对于业务需求的抽象能力、对于产品落地交互的具象能力,以及咨询里说的MECE熟练度。而市面上做的好的产品是提供了落地实现的,这也是能节约我们大量时间的环节。

啰嗦一句,就是借鉴的过程,需要弄清原产品背后的逻辑。比如钉钉里的选择人员,为什么要给这么多选项,我们自己的产品需不需要这么多选项?这些都是要自己思考清楚的。

03 权限系统和工作流存在要素重叠

把权限系统和工作流放在一起写,是因为二者会有一些重叠关系。认真看文章的小伙伴应该发现了,角色这个词是贯穿这两部分的。我们看看如果一个B端产品,需要从0到1设计这两部分会是怎样?

(权限系统-工作流的设计流程)

我们创建的角色,可以作为权限系统里去分配权限,也可以在工作流里作为审批的执行人。角色本质是一层抽象,抽象的好处就在于能够解耦用户和权限,解耦用户和审批人。抽象会带来更多的复用性。

04 最后

B端产品在设计权限和工作流的时候,非常建议大家去看看钉钉、企微这些OA系统。审视OA产品,会发现OA系统对于权限,角色,工作流,玩的很明白,是非常好的学习方向。

飞书的审批功能目前看起来比企微和钉钉的审批要弱化一些,这和产品定位也有一些关系,飞书强在效率提升,钉钉强在办公管理,企微强在关系链接,产品的基因会决定产品功能。

但是相信有钉钉、企微的先行探索,飞书也是能快速赶上的,毕竟存在后发优势。

现在SaaS是一个很火的领域,C端产品从0到1的设计产品的机会越来越稀少,SaaS的产品经理会有更多机会能够从0到1设计产品。在这个过程中,工作流和权限系统几乎不可或缺。

大家之后工作中,可以借鉴这些做的比较成功的产品,看看这些甚至连间接竞品都算不上的产品,学习他们的强势,发挥自己的后发优势,节约时间去更快的迭代产品。

本文由 @忙里偷贤 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自 Unsplash,基于CC0协议

在mysql数据库中怎么实现管理员 学生 老师不同权限登陆,并连接到不同...

示例代码没有
不过可以给你一些建议,我觉得你那种操作数据库好像不现实吧,或者说我没试过,但是我觉得你操作后台代码会比较好点,比如用户为老师登陆的时候,你在后台做一个判断,然后根据判断从数据库表A中取出数据,只是你在页面显示的时候只将与老师有关的数据显示出来就可以了撒,登陆身份为学生的时候也是一样的嘛
比如表A中有字段:科目、成绩、阅卷教师
老师登陆的时候从表A将所有数据取出并显示,学生登陆的时候也取出自己的数据,但是不将阅卷教师显示出来就行了啊

在mysql数据库中怎么实现管理员 学生 老师不同权限登陆,并连接到不同...

示例代码没有
不过可以给你一些建议,我觉得你那种操作数据库好像不现实吧,或者说我没试过,但是我觉得你操作后台代码会比较好点,比如用户为老师登陆的时候,你在后台做一个判断,然后根据判断从数据库表A中取出数据,只是你在页面显示的时候只将与老师有关的数据显示出来就可以了撒,登陆身份为学生的时候也是一样的嘛
比如表A中有字段:科目、成绩、阅卷教师
老师登陆的时候从表A将所有数据取出并显示,学生登陆的时候也取出自己的数据,但是不将阅卷教师显示出来就行了啊

thinkphp的auth权限和rbac有什么区别

相同点:

1.两种都是基于角色权限控制

2.都是同一个用户可属于多个角色或用户组

不同点:

Rbac:

1.Rbac是基于节点控制,根据3级节点,mole,controller,action,节点类似与树形结构,3级节点间相互有关联

2.表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表

3.根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作

Auth:

1.Auth是基于规则控制,定制规则和条件表达式 ,每一条规则都是的

2.表关系:用户表->用户和用户组关联表->用户组表->规则表

3.根据规则控制,可自由定制不同的规则,非常自由,同一个规则内可以定制多个不同节点(中间的关系:OR AND)

4.可定制规则表达式,比如定制积分表达式

想法和问题:

Auth:

1.Auth验证多条规则时条件表达式不起效果

2.Auth官方例子只说一个根据积分的规则,假如我规则"Admin/Goods/goodsList,Admin/Goods/goodsDel"我

能不能定义这里面的某些ID所属角色操作权限的规则表达式,而这些所属角色id是goods表里的某个字段,可能所属的角色是多个不同的角色?

3.Auth不支持"Admin/*"泛解析,因为他每一条规则都是的

4.对菜单,页面,按钮类的显示使用Auth会必Rbac更好更方便

Rbac:

1.新手配置Rbac的时候经常出现 Rbac $_SESSION['_access_list'] 获取不到的问题,因为Rbac是使用ThinkPHP的底层DB引擎DSN连接数据库,需要配置数据库链接和5个表的关系,字段名和表名不能出现问题

2.允许完成"Admin/*"类型的泛解析,比如这里直接定制一个Admin模块的节点,不要下级节点就可以了

通用:

1.不管是Rbac的角色表或者Auth里面的用户组表也好,都可以扩展,比如对角色或用户组进行多层分级

2.Rbac的节点和Auth的规则都可以进行分级,比如前端功能权限,后端功能权限,后端某个功能模块权限等等

3.上面两个东西都不能应用到权限管控之中去,比如Rbac不能分享上级角色权限,Auth用户组也不能,但是能更好的管理和更加流程化的操作.

thinkphp的auth权限和rbac有什么区别

相同点:

1.两种都是基于角色权限控制

2.都是同一个用户可属于多个角色或用户组

不同点:

Rbac:

1.Rbac是基于节点控制,根据3级节点,mole,controller,action,节点类似与树形结构,3级节点间相互有关联

2.表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表

3.根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作

Auth:

1.Auth是基于规则控制,定制规则和条件表达式 ,每一条规则都是的

2.表关系:用户表->用户和用户组关联表->用户组表->规则表

3.根据规则控制,可自由定制不同的规则,非常自由,同一个规则内可以定制多个不同节点(中间的关系:OR AND)

4.可定制规则表达式,比如定制积分表达式

想法和问题:

Auth:

1.Auth验证多条规则时条件表达式不起效果

2.Auth官方例子只说一个根据积分的规则,假如我规则"Admin/Goods/goodsList,Admin/Goods/goodsDel"我能不能定义这里面的某些ID所属角色操作权限的规则表达式,而这些所属角色id是goods表里的某个字段,可能所属的角色是多个不同的角色?

3.Auth不支持"Admin/*"泛解析,因为他每一条规则都是的

4.对菜单,页面,按钮类的显示使用Auth会必Rbac更好更方便

Rbac:

1.新手配置Rbac的时候经常出现 Rbac $_SESSION['_access_list'] 获取不到的问题,因为Rbac是使用ThinkPHP的底层DB引擎DSN连接数据库,需要配置数据库链接和5个表的关系,字段名和表名不能出现问题

2.允许完成"Admin/*"类型的泛解析,比如这里直接定制一个Admin模块的节点,不要下级节点就可以了

通用:

1.不管是Rbac的角色表或者Auth里面的用户组表也好,都可以扩展,比如对角色或用户组进行多层分级

2.Rbac的节点和Auth的规则都可以进行分级,比如前端功能权限,后端功能权限,后端某个功能模块权限等等

3.上面两个东西都不能应用到权限管控之中去,比如Rbac不能分享上级角色权限,Auth用户组也不能,但是能更好的管理和更加流程化的操作.

显示全文