gpt4 book ai didi

python - Odoo 模型访问规则未按预期工作

转载 作者:行者123 更新时间:2023-12-01 09:22:43 24 4
gpt4 key购买 nike

型号:-

from odoo import models, fields, api

courses = [
('mca', "MCA"),
('bca', "BCA"),
('bsc', "B.Sc"),
('msc', "M.Sc"),
('btech', "B.Tech"),
('mtech', "M.Tech"),
]

class openacademy(models.Model):
_name = 'openacademy.student'

name = fields.Char(string="Student Name")
roll = fields.Integer(string="Roll Number")
course = fields.Selection(courses, string="Course")

群组:-

<record model="ir.module.category" id="category_openacademy">
<field name="name">Open Academy</field>
<field name="sequence">10</field>
</record>

<record id="group_student" model="res.groups">
<field name="name">Student</field>
<field name="category_id" ref="category_openacademy"/>
<field name="comment">Basic access</field>
</record>

<record id="group_teacher" model="res.groups">
<field name="name">Teacher</field>
<field name="category_id" ref="category_openacademy"/>
<field name="comment">Complete Access</field>
</record>

模型访问规则 (ir.model.access.csv):-

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
ACL_st,oa.ACL_st,model_openacademy_student,group_student,1,0,0,0
ACL_te,oa.ACL_te,model_openacademy_student,group_teacher,1,1,1,1
ACL_ng,oa.ACL_ng,model_openacademy_student,,1,1,1,1

现在,如果学生组用户登录应用程序,那么他可以写入/删除记录,但只有读取权限。

我希望如果登录的用户不属于任何组,那么他可以执行任何操作,这就是我添加此规则的原因:-

ACL_ng,oa.ACL_ng,model_openacademy_student,,1,1,1,1

最佳答案

问题正如你猜的那样:

ACL_ng,oa.ACL_ng,model_openacademy_student,,1,1,1,1

那会让学生做任何事。

问题是组权限是通过OR连接的。属于 group_student 的用户将受到两条模型访问线的影响:

ACL_st,oa.ACL_st,model_openacademy_student,group_student,1,0,0,0
ACL_ng,oa.ACL_ng,model_openacademy_student,,1,1,1,1

因此,由于 0 OR 11,它们可以读取、创建、写入和删除。

因此,我会执行以下操作:

我会替换该行:

ACL_ng,oa.ACL_ng,model_openacademy_student,,1,1,1,1

用这一行:

ACL_ng,oa.ACL_ng,model_openacademy_student,base.group_user,1,1,1,1

该行确保每个用户都可以使用 openacademy.student 模型执行任何操作。

现在我们必须告诉 Odoo 学生只能阅读,因此我将创建一条规则,通过 AND 连接起来。

<record model="ir.rule" id="model_openacademy_student_group_student_rule">
<field name="name">openacademy_student: students can only read</field>
<field name="model_id" ref="model_openacademy_student"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_student'))]"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
<field name="perm_write" eval="False"/>
</record>

因此,由于 1 AND 00,属于 group_student 的用户将不允许在 openacademy.student 模型。规则的应用取决于记录值,但通过 domain_force -> [(1, '=', 1)] 我们确保每条记录都受到我们的规则的影响。

另一方面,标准用户(每个用户都属于base.group_user,因为默认用户属于它 - 请参阅base模块 base_security.xml-) 不会受到该规则的影响,该规则仅适用于 group_student,因此他们仍然可以从 openacademy 创建、写入和删除记录.学生。属于 group_teacher 的用户也是如此。

关于python - Odoo 模型访问规则未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50694594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com