模型: -
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
答案 0 :(得分: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 1 1 时,他们可以阅读,创建,写入和删除。
因此,我会做以下事情:
我会替换该行:
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 0 0 时,不允许属于group_student
的用户创建,写入或删除{{1}中的记录模型。根据记录值应用规则,但使用openacademy.student
- &gt; domain_force
我们确保每条记录都受到我们规则的影响。
另一方面,标准用户(每个用户都属于[(1, '=', 1)]
,因为默认用户属于它 - 请参见base.group_user
模块, base_security.xml - )不受规则的影响,该规则仅适用于base
,因此他们仍然可以创建,编写和删除group_student
中的记录。属于openacademy.student
的用户也一样。