关于结合人力资源模块利用domain设置角色权限问题总结
-
OE中的domain很牛也很可恶,没有什么很详细的说明
我测试的结果:
'a'='b' 这个条件中,
a可以是本对象字段,也可以是字段many2one对应的,例如常见的oecn_training_lesson中,teacher为many2one 对应res.users,
那么公式可以这样写:[( 'teacher.login' ,'=','admin')] 意思就是 记录中老师的登录名为admin的记录列出来,注意在a为变量时, 是需要这样'a' 引号的
b 加引号 'b' 时,是固定值,例如上面的 'admin'
b 也可以使用变量,例如 user.name 则为当前用户的名字,那么上面公式可以为 [( 'teacher.login','=', user.name)],也就是老师登录名是当前用户名字的记录
综合上面的情况,求证 销售一部经理,只能看到本部门数据的 情况
为:[('user_id','in', [workmate.user_id.id for workmate in user.employee_ids[0].department_id.member_ids])]
说明:
1.需要对象中要有user_id字段,虽然默认oe都有create_uid这个字段,但在columns中木定义,这里使用不行,会报错,奇怪,可我用[('create_uid','=',user.id)]时可以,鬼知道为什么
2. user.employee_ids[0].department_id.member_ids 意思是,当前用户对应的hr中的员工的部门的成员
(OE,一个登陆帐号,可以对应多个企业员工,这里只取第一个,也就是最好一个帐号就对应一个员工)
那么上面的意思就是 查出 记录的归属者是当前用户的同事的记录
这种做法可能有那么点别扭,可不用写代码就可以完成,还算凑合 -
暂时没考虑部门级别问题,比如上级部门查看下级部门的数据,OE的人员只能属于一个HR部门
如果可以定义变量类似user这样的
那么可以定义一个我管辖的用户这样一个变量列表,在[('user_id','in',我管辖的用户)] 这样比较合适
一直不知道如何去定义这样一个变量
在column中定义'context_department_id': fields.function(_get_self_department_ids,type="hr.department"), 类似这样定义部门,这个department_id好像也不能用在domain中,但从浏览器上确实看到department_id的值在前台的params中,每次post到后台时,都会把这个department_id送到OE-server,
而且这个department_id函数定义返回的结果是可定义的字段类型,没有[1,2,3]这种列表方式,也不好在domian中用in去处理