以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于多个条件的权限管理问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=147588) |
-- 作者:lgz518 -- 发布时间:2020/3/19 23:40:00 -- 关于多个条件的权限管理问题 然后在订单表的DataRowAdding事件 中加入代码: e.DataRow("业务员") = User.name 这样新增订单的时候,会自动在业务员列填入当前登录用户名。 3、最后将订单表的PrepareEdit事件设置为: If e.Row("业务员") <> User.Name Then 这样在编辑某个订单前,会自动判断负责此订单的业务员是否和登录用户名相同,如果不同,则取消编辑。 让不同用户处理不同的行 我们已经学会了如何设置代码,使得用户只能编辑自己负责的行,而对于其他用户负责的行,则只能查看,不能编辑。 以订单表为例,我们要求: 1、张经理可以处理所有订单。 设计步骤: 1、首先我们要确保在初始状态下,不加载任何订单,对于内部表和外部表,有不同的处理方式。 如果是内部表,设置BeforeLoadInnerTable事件为: If e.DataTableName = "订单" Then 如果是外部表,可以在定义外部表的时候,直接定义加载条件: 由于任何行的_Identify列的内容都不可能为空,所以上述代码和设置会使得初始状态不会加载任何订单。 2、在项目的LoadUserSetting事件中设置代码,加载用户负责的订单: If User.Name = "张经理" Then 这样用户登录后,系统判断登录用户是否是张经理,如果是的,则加载所有订单,否则只加载登录用户负责的订单。 上面的代码是基于用户名的,同样可以改为基于用户分组的,只需将上述代码中的User.Name改为User.Group,并将用户名替换为分组名即可。 1.现在有以下问题 1.1实例中,张经理,是写死,实际开发中,都用,部门,姓名来,还实例说用户管理,取经理,实际开发销售经理只负责销售,也只能看销售,采购经理只负责采购,也只能看采购。 1.1.1如果小张和小明都是经理,但实际小张是销售经理,小明采购经理,按实例说,定为经理,会造成错乱,是不是不能在用户管理写经理,要区分开,销售经理,采购经理. 1.1、2 上面好象分开,但还是不灵活,因为有客户销售经理不叫销售经理,而叫业务经理,然而我们权限代码写是销售经理,会造成报错,无法执行,应如何写? 1.2 加载实际是以编辑者,有一种情况,比如业务员张三接之前李四的工作,那以编辑者,之前订单是李四编辑,不是张三,那张三是不是看不到? 1.3 有时经理下有组长,再有业务员,如何实现经理可看本部门,组长只看本组长,业务员只看自己? |
-- 作者:sloyy -- 发布时间:2020/3/20 2:50:00 -- 1 你的逻辑非常混乱,既然有不同的部门,干嘛不按部门+姓名来加载? 2 如果你设计了只能编辑者本人加载,那就是张三不能看李四的 3 增加一个等级列 业务员1 组长2 经理3 总经理4 那么业务员加载等级=1 的数据,组长加载等级<=2的数据 经理加载等级<=3的数据....
|