【自然框架】之通用权限(三):组织结构表组

      继续,这是第三章了。拖得有点长,但是我也是一边写,一边在想办法,想怎么做才能让资源权限也能通用起来。看大家的回复也给了我一些提示,我也在修改我的方案。原来打算用来解决一个人虽然在业务一部,但是却可以看业务一部、业务二部的客户信息的情况,但是仔细想了一下,这么做也不行。不过还好,我又找到了另一个方法来解决,而且可以让资源权限更加通用。不过这个详细的方法要放在下一章的角色表组里面来说明了。(这是写这篇之前的想法,写完之后想法又变了。)

通用权限想要写的文章目录:(这是第三章)

1、 简介、数据库的总体结构 2、 介绍人员表组 3、 介绍组织结构表组 4、 介绍角色表组 5、 介绍“项目自我描述表组” 6、 权限到节点 7、 权限到按钮 8、 权限到列表(表单、查询) 9、 权限的验证 10、 资源方面的权限 11、 角色管理的程序(给客户用的) 12、 权限下放 13、 个性化设置 A、、 【自然框架】之通用权限(外传):杂谈

组织机构表组

      这个简单一些,目前只有两个表。 Dept_Department,这个是n级分类的设置,对以小公司来说,可以放业务部、客户服等部门;对于集团来说可以先放分公司(比如子公司1、子公司2),然后再在下一级里面放业务部、客户服等。而对于更大的集团的话,可以先放置“西北区”、“华北区”、“华东区”这样的大区,然后再在下一级放分公司,再在下下一级放业务部、客户服。就是说一个公司不管如何去划分“部门”,总之都往这个表里面放。

字段名

中文名

字段类型

字段大小

默认值

是否为空

说明

DepartmentID

组织机构

int

4

1

0

主键

机构名称

机构名称

nvarchar

50

_

0

可以是部门,也可以是分公司、地区

机构简称

机构简称

nvarchar

50

_

0

机构简称

结构描述

结构描述

nvarchar

50

_

0

结构描述

机构类型

机构类型

nvarchar

50

_

0

机构类型

办公室电话

办公室电话

nvarchar

50

_

0

办公室电话

传真

传真

nvarchar

50

_

0

传真

邮编

邮编

varchar

6

_

0

邮编

地址

地址

nvarchar

50

_

0

地址

备注

备注

nvarchar

50

_

0

备注

子机构数量

子机构数量

int

4

0

0

不包括子子机构

本机构员工数

本机构员工数

int

4

0

0

本机构(不包括子机构)的员工数

本机构全部员工数

本机构全部员工数

int

4

0

0

本机构和子机、子子机构的员工数量

ParentID

父节点ID

int

4

1

0

父节点ID

ParentIDPath

父节点ID的路径

nvarchar

30

0,

0

父节点ID的路径

DeptLevel

机构层数

int

4

1

0

第几级的机构

Sort

序号

int

4

1

0

总排序

Dept_Department_Person,表示一个机构里面有哪些人员,机构和人员是多对多的关系。

字段名

中文名

字段类型

字段大小

默认值

是否为空

说明

DeptPersonID

序号

int

4

1

0

主键

DepartmentID

组织机构

int

4

1

0

外键

PersonID

人员ID

int

4

1

0

外键

      问:为什么要在权限里面加上组织机构?他和权限有什么关系呢?       答:准确的说,组织机构和操作权限基本上没有什么关系,但是却和资源权限有很大的关系。

      我想用我以前做过的一个CMS项目来说明,我先简要介绍一下客户的情况。出于商业秘密原因,我说的会比较“模糊”,但是并不会影响说明组织机构和资源权限的关系。

      客户是一个集团公司,集团里面有四个销售子公司,和一个售后服务公司。销售子公司都是独立运营,各卖各的产品;售后服务公司内部分为四个服务部,分别对应四个销售公司。(如下图) 

      Dept_Department 里的信息如下:

 部门里的人员信息:

      就是说一个客户购买了销售一公司的产品后,服务一部就要对这个客户进行售后服务。这样就出现了,销售一公司填写客户信息的时候,很自然的这个客户就成为了销售一公司的客户(客户的部门ID记录的是销售一公司的部门ID“3”)。然后服务一部的员工要对销售一公司的客户进行售后服务,那服务一部的员工就要可以看到销售一公司的客户(不能看到其他销售公司的客户信息)。

      这就出现了一个问题,客户信息里面并没有服务一部的部门ID,那我们怎么区分呢?把服务一部的员工都放在销售一公司吗?这不就乱了吗?我当时是做了一个部门ID的对应关系,虽然可以解决,但是很显然不够通用。

      这还没完,服务部又出来了一个问题,服务一部的经理可以看到服务一部的客户外,还可以看到服务二部的客户信息,而服务三部和服务四部的经理都只能看到自己的服务部的客户信息。这个倒是好办,可以把服务一部的经理放在服务一部和服务二部里面。

      最后还有一个普遍的问题,那就是销售一公司的业务员只能看到自己添加的客户信息,销售公司的经理只能看到销售一公司的客户信息。

      三个问题,虽然可以用许多的方式方法来解决,但是如何来统一呢,如何不用写死在代码里面呢?

      问题的根本原因就在于一个人所在的部门,与可以看到的部门不一致!虽然对于第二个问题可以采用强制一致的方法,但是对于第一个问题就不行了。

      我前几天的想法是这样的,在Person_User_Info表里面添加一个DepartmentIDs字段,这个字段来记录人员可以查看的部门ID,比如服务一部的售后服务工程师的DepartmentIDs 字段的内容就是:“3,8”。这样我们就是用了两个“地方”来存放人员和部门的对应关系。

      但是仔细想一想,这个方法也不够完美,还是有一个问题和一个隐患。       问题:我需要知道访问页面的人是业务员、服务工程师还是经理。如果不能确认的话,就无法进行资源的过滤。       隐患:如果发生了冲突了怎么办。比如,假设服务工程师可以看到业务员修改客户信息的页面,那么服务工程师不就会因为DepartmentIDs的原因而可以修改客户信息了吗?虽然我可以不给服务工程司分配业务员的修改客户信息的页面的权限,但是我总觉得,其他的地方有可能会出现冲突的情况。

      所以我就想放弃这个想法,改用角色资源的方式,这个在下一章的角色里面在说明。

      在写这一篇之前还是想放弃这个方案的,但是一边写一边想,最后还是保留这个方法吧,只要能够和角色,资源角色配合好,这个方法还是可行的。

如果您想看数据库说明文档(人员、角色、组织机构、项目描述、还有上一篇里的图)的话,可以到这里下载:http://www.cnblogs.com/jyk/archive/2009/06/06/1497616.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

调教属于你的“贾维斯”(给自己挖了一个很大的坑)

人工智能离我们有多远?你觉得只有战胜柯杰的阿尔法狗才算是人工智能吗?看看周围:你的美颜相机、你刷的抖音推荐、你手机上的语音助手……甚至包括给你送外卖的小哥分配,...

1652
来自专栏张戈的专栏

分享一款12306抢票神器:12306Bypass分流抢票

一直都用浏览器抢票,那个验证码自动识别的准确率和效率真心不敢恭维! 实在没办法,这几天只能抢临客了,想起了之前听同事说过在某宝可以买到什么抢票神器,于是去某宝搜...

60211
来自专栏python+iOS学习交流

iOS程序员请改掉影响你升职加薪的36个坏习惯!

IT行业的科技公司们一直苦苦追寻传说中以一当十的超级程序员,最新的研究表明确实存在这样一小撮效率奇高的“程序金刚”,但是一位普通程序猿如何能够蜕变成代码金刚呢?

1220
来自专栏阮一峰的网络日志

关于战略问题的通信之六

《Joel谈软件》一书的翻译,我好久没提了。 合同规定今年1月交稿。假定我没有违约的话,此书现在应该上市了。可是,实际上......就算到下个月,我恐怕都翻译不...

2987
来自专栏Java进阶架构师

变天 | 白用23年的Java不再免费,谷歌收安卓授权费

先是在9月份,Java 开发工具包(JDK)11 正式发布,这件事情对只会更新APP的普通大众来说,发布新版本不是一件好事嘛,怎么能算是坏消息呢?就像我的iPh...

1501
来自专栏Dawnzhang的开发者手册

玩转Google

 网上浏览信息,用百度搜索的时候,第一页都是广告,真是槽心到极点,果断放弃百度,现在用谷歌是真舒服,用起一句话用好谷歌、用好搜索引擎、你可以打开世界的大门!

2682
来自专栏Java社区

这也许是史上最有趣的破解软件合集

3832
来自专栏UML

ArchiMate 图示例:需求建模

ArchiMate是一种图形语言,为模型提供统一的表示,以支持完整的体系结构开发周期。它由一种核心语言组成,旨在描述实际体系结构(业务,信息系统和技术体系结构,...

2424
来自专栏华章科技

毁掉你代码的35个不良习惯

近日web开发专家Christian Maioli总结了导致程序猿效率低下,代码像意大利面条一样难以维护的35条恶习(归为代码组织、团队工作、写代码、测试与维护...

1081
来自专栏Dawnzhang的开发者手册

本周新鲜事:有的技术线负责人,我0点打电话,都睡觉了,很会养生。

大家知道 VIVO 上周发布了一款很有逼格的手机 VIVO NEX,这款手机有个很炫的功能就是采用升降前置摄像头配置,就是你拍照的时候会从手机顶部弹出一个镜头进...

913

扫码关注云+社区

领取腾讯云代金券