Foxtable(狐表)用户栏目专家坐堂 → 关于多个条件的权限管理问题


  共有1924人关注过本帖树形打印复制链接

主题:关于多个条件的权限管理问题

帅哥哟,离线,有人找我吗?
lgz518
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
关于多个条件的权限管理问题  发帖心情 Post By:2020/3/19 23:40:00 [只看该作者]

然后在订单表的DataRowAdding事件 中加入代码:

e.DataRow("业务员") = User.name

这样新增订单的时候,会自动在业务员列填入当前登录用户名。

3、最后将订单表的PrepareEdit事件设置为:

If e.Row("业务员") <> User.Name Then
    e.Cancel = 
True
End If

这样在编辑某个订单前,会自动判断负责此订单的业务员是否和登录用户名相同,如果不同,则取消编辑。



让不同用户处理不同的行

我们已经学会了如何设置代码,使得用户只能编辑自己负责的行,而对于其他用户负责的行,则只能查看,不能编辑。
不过有的时候,对于其他用户负责的行,连查看都是不允许的。
对于这种情况,我们可以用动态加载的功能,在打开项目后,只加载登录用户负责的行即可实现目的。

以订单表为例,我们要求:

1、张经理可以处理所有订单。
2、其他用户只能处理自己负责的订单。

设计步骤:

1、首先我们要确保在初始状态下,不加载任何订单,对于内部表和外部表,有不同的处理方式。

如果是内部表,设置BeforeLoadInnerTable事件为:

If e.DataTableName = "订单" Then
    
e.Filter = "[_Identify] Is Null"
End If

如果是外部表,可以在定义外部表的时候,直接定义加载条件:

图片点击可在新窗口打开查看

由于任何行的_Identify列的内容都不可能为空,所以上述代码和设置会使得初始状态不会加载任何订单。

2、在项目的LoadUserSetting事件中设置代码,加载用户负责的订单:

If User.Name = "张经理" Then
    DataTables("订单").LoadFilter = ""
Else
    
DataTables("订单").LoadFilter = "业务员 = '" & User.Name & "'"
End
 If
DataTables
("订单").Load()

这样用户登录后,系统判断登录用户是否是张经理,如果是的,则加载所有订单,否则只加载登录用户负责的订单。

上面的代码是基于用户名的,同样可以改为基于用户分组的,只需将上述代码中的User.Name改为User.Group,并将用户名替换为分组名即可。




1.现在有以下问题

1.1实例中,张经理,是写死,实际开发中,都用,部门,姓名来,还实例说用户管理,取经理,实际开发销售经理只负责销售,也只能看销售,采购经理只负责采购,也只能看采购。

1.1.1如果小张和小明都是经理,但实际小张是销售经理,小明采购经理,按实例说,定为经理,会造成错乱,是不是不能在用户管理写经理,要区分开,销售经理,采购经理.

1.1、2 上面好象分开,但还是不灵活,因为有客户销售经理不叫销售经理,而叫业务经理,然而我们权限代码写是销售经理,会造成报错,无法执行,应如何写?

1.2 加载实际是以编辑者,有一种情况,比如业务员张三接之前李四的工作,那以编辑者,之前订单是李四编辑,不是张三,那张三是不是看不到?

1.3 有时经理下有组长,再有业务员,如何实现经理可看本部门,组长只看本组长,业务员只看自己?











 回到顶部
帅哥哟,离线,有人找我吗?
sloyy
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2180 积分:13804 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2020/3/20 2:50:00 [只看该作者]

1 你的逻辑非常混乱,既然有不同的部门,干嘛不按部门+姓名来加载?
2 如果你设计了只能编辑者本人加载,那就是张三不能看李四的
3 增加一个等级列 业务员1 组长2 经理3 总经理4 那么业务员加载等级=1 的数据,组长加载等级<=2的数据 经理加载等级<=3的数据....

 回到顶部