找回密码
 立即注册

QQ登录

只需一步,快速开始

一眼望天涯
高级会员   /  发表于:2022-4-30 19:26  /   查看:2899  /  回复:8
50金币
本帖最后由 一眼望天涯 于 2022-4-30 19:28 编辑

有个合同表,里面包含了所属的部门(可能是一个、也可能是多个),希望设置为:
如果合同所属的部门和用户所属的部门有相同的,那么可以增删改查。比如合同一属于a部门、b部门的,用户张三是a部门、c部门的,那么张三可以操作合同一;
如果合同合同所属的部门和用户所属的部门没有相同的,再判断用户的部门,如果用户是a部门,那么可以查看,如果不是,那么不能查看。比如合同二属于c部门的,用户李四是a部门的,这种情况下李四只能查看合同二,而不能修改和删除。

请问这种情况该怎么设置呢?
用户名是张三,密码123456

(在之前的设置中,只有合同属于一个部门、用户属于多个部门,或者合同属于多个部门、用户属于一个部门,这两种情况下才能进行相关的查询和权限设置,如果合同和用户都属于多个部门,这种情况怎么处理?)



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

您好,针对这个问题,我的思路是这样的:首先,需要一张表来维护用户和部门间的对应关系,这里我是通过服务端命令保存组织结构到表,然后使用公式字段截取了成员路径中的部门部分。 页面上绑定这张表并设置查询条件,查找当前登录用户对应的部门有哪些 在表格中的“查看”超链接上进行判断,循环用户表,逐一对比【部门】是否在【所属部门】里面,如果在里面,给用于判断是否允许修改的变量+1,否则什么也不做。 这样,如 ...

8 个回复

倒序浏览
最佳答案
最佳答案
Chelsey.Wang讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-4-30 19:26:55
来自 9#
您好,针对这个问题,我的思路是这样的:首先,需要一张表来维护用户和部门间的对应关系,这里我是通过服务端命令保存组织结构到表,然后使用公式字段截取了成员路径中的部门部分。

页面上绑定这张表并设置查询条件,查找当前登录用户对应的部门有哪些

在表格中的“查看”超链接上进行判断,循环用户表,逐一对比【部门】是否在【所属部门】里面,如果在里面,给用于判断是否允许修改的变量+1,否则什么也不做。

这样,如果每一个部门都不在当前行【所属部门】里面,最终是否允许修改变量的值就是0,然后可以根据这个变量的值执行后续命令。
比如不允许修改跳转到查看页面,允许修改的跳转到查看和修改页面。


附上demo,可以参考一下


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
trueboy活字格认证
高级会员   /  发表于:2022-5-2 02:19:10
2#
前期准备:

1另外新建一个合同底表,以字段精简为佳, 比如 "合同编号" ,"部门",2个字段就可以了

因此,有"合同表"和"合同底表"2个表来完成一些功能.
2创建用户信息视图

合同业务流程:

当在合同表中添加(更新,删除)新合同的时候,同步添加(更新,删除)合同底表.
区别就是合同表使用的是部门(a,b,c,d)这样的字符串值存储.
合同底表使用的是:  行1 部门a ,行2,部门b,行3,部门c,行4,部门d   这样的数据行.即此合同编号对应有4行数据.

数据逻辑:

新增:使用服务器端命令,做循环添加数据库,循环次数为部门数组.是数组,不是你那尴尬的用逗号拼接的字符串a,b,c,d.(此处需要使用插件转成数组,看知识点)
更新:当所属部门有变动时(a,c,d),服务器端命令,先将底表数据中该合同编号的数据全部删除,然后调用新增服务器端命令,重新添加..因为底表结构简单,数据量极少,因此一刀切,删除了,再添加.

员工操作流程前准备:

1增加隐藏表格2绑定合同底表,查询条件为"部门"字段 in  张三的(部门数组)(查看数组知识点),这样就能将对应的合同编号筛选出来,

2增加隐藏辅助单元格,名字叫,"筛选合同编号数组", 公式=textjoin(表格2的合同编号列名,....查看该公式的用法) 将1筛选出来的合同编号拼接成数组.(有逗号字符串不一定就是数组)

3增加隐藏辅助单元格,名字叫"允许显示的合同编号数组"(作用是用来判断张三的部门组的权限后,对应的允许查看或修改的合同编号)

4增加页面加载命令:

条件
if
张三的部门数组 包含 值(=部门a,该部门为事先约定拥有跨部门查看的权限组),设置单元格"允许显示的合同编号数组"值为空.
else
设置单元格"允许显示的合同编号数组"值为        "筛选合同编号数组"
end


5表格1绑定合同表,查询条件为合同编号 in  "允许显示的合同编号数组"(若为空,则为所有合同,若有值则为部分合同)

6,增加隐藏辅助单元格,a2,名字叫"获取当前行索引"
7,增加隐藏辅助单元格,文本框,a3,=index(表1,a2,数一下表格1合同编号是第几列)  ,若是能显示选中行对应的合同编号那么就是数对了.没有列名称的列不需要数.同时该文本框增加命令,条件,if  a3的值 in "筛选合同编号数组" ,命令:设置单元格属性,"修改合同" 按钮(下文提到),启用(或者显示) else 命令:设置单元格属性,"修改合同" 按钮,禁用(或者不显示)



由于是编辑权和查看权都混在一起的.
因此,在顶部做一个 "修改合同"按钮, 不要在行明细里添加,因为行明细中的按钮能执行的功能极少. 而且这都是几年前的ui设计风格,现在都不流行了,都是走简约,清爽风.

至此,当员工张三进入合同列表菜单时,表格1会将编辑权和若有查看权的合同编号都列出来了.
当选中某个合同时,会校验他对应的权限(7里面的设置),"修改合同"按钮是否允许使用.



知识点需要准备:

1, 用户属于多个部门,要创建用户信息视图,你的domo里连这个视图都没创建.
2,搜索插件,"分割文本为数组",用来将用户信息视图中的部门,分割成数组,将合同表中的部门转成数组.
3,用逗号拼接的,叫字符串,不叫数组,是不能使用 in 或者 not in ,所以需要 2 插件.
回复 使用道具 举报
trueboy活字格认证
高级会员   /  发表于:2022-5-2 02:34:29
3#
这种多对多 的关系的.
建立一个底表,是比较方便的,,因为可能在其他的功能中,还是要用到这个底表进行逻辑判断的.
有些系统中 ,不建立底表,而是写代码创建临时表或视图,将合同表的数据遍历一次,形成一个底表结构的临时表或者视图,然后 再进行后续的逻辑判断 .
最终返回一个合同编号数组.
但是这种,就是每次都要去生成临时表,对系统是一个计算负担. 在此合同场景中使用底表,是比较快速的方法.
其他小伙伴有其他思路,也可以分享下.

有没有开发业务,可以介绍给我下,发个广告,"辰宣网络科技",官方合作伙伴.承接一些简单而不简约的系统开发.
这广告词,真low.

回复 使用道具 举报
trueboy活字格认证
高级会员   /  发表于:2022-5-2 17:58:59
4#
做了一个用服务器命令的,非针对本问题的.
可以借鉴下,看看是否能帮到你,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
一眼望天涯
高级会员   /  发表于:2022-5-2 18:05:43
5#
trueboy 发表于 2022-5-2 02:34
这种多对多 的关系的.
建立一个底表,是比较方便的,,因为可能在其他的功能中,还是要用到这个底表进行逻辑 ...

能否提供个demo?光说很难理解呀
回复 使用道具 举报
trueboy活字格认证
高级会员   /  发表于:2022-5-4 12:17:13
6#
亲,按照我说的一步一步的操作下去, 这个方案肯定能行的.
做demo ,这没有法做,按照我的性格,直接是一个成品了.
可我不想做,
别指望等现成的,就算是有,你若是没有理解之中的逻辑关系, 你依旧还是没有办法修改.


回复 使用道具 举报
trueboy活字格认证
高级会员   /  发表于:2022-5-4 12:18:25
7#
或者你参考我发的 源文件 , 这个里面是使用的服务器端命令.这个方案是比较简单的.
回复 使用道具 举报
一眼望天涯
高级会员   /  发表于:2022-5-5 08:36:27
8#
期待高手来看看~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部