关注各种黑科技
B站UP主,编程教学,游戏玩家,挂B,金牛座

Odoo安全与权限

在odoo中配置访问控制机制来实现连贯的安全策略。  

Group-based access control mechanisms 基于组的访问控制机制

通过组权限来实现权限管理,组是保存在res.groups里的一些记录。 菜单的权限可以通过xml中菜单的定义设置组权限。 菜单下关联的model也要设置对象级别的访问权限(read, write, create, unlink),并关联到特定组。 还有一些model.py里的做权限检查或xml定义中设置field相关的组。  

Access rights 访问权限

访问权限是model - ir.model.access的一些记录。通过ir.model.access.csv文件配置来导入一些记录值使之生效。
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_idea_idea,idea.idea,model_idea_idea,base.group_user,1,1,1,0
access_idea_vote,idea.vote,model_idea_vote,base.group_user,1,1,1,0
id唯一的id 映射到ir_model_data中 name显示名 model_id/id model的xml_id group_id/id group的xml_id 可空 为全局权限 perm_read,perm_write,perm_create,perm_unlink 读 写 创建 删除权限   练习1 不写代码,直接在odoo后台添加权限关系 创建一个用户John Smith,创建一个组OpenAcademy / Session Read 关联到Session model。 操作步骤 1 通过菜单 Settings ‣ Users ‣ Users 创建John Smith用户 2 通过菜单Settings ‣ Users ‣ Groups 创建 session_read用户组,对Session model可读 3 把John Smith 加入session_read组 4 用John Smith登陆测试   练习2 使用data文件定义权限,创建OpenAcademy / Manager组并关联到所有OpenAcademy模型,让Session和Course模型对所有用户可读。 1 在openacademy/security/security.xml中写入组 2 在openacademy/security/ir.model.access.csv写入访问权限 3 更新openacademy/__openerp__.py 添加新文件   创建组 openacademy/__openerp__.py
    # always loaded
    'data': [
        'security/security.xml',
        'security/ir.model.access.csv',
        'templates.xml',
        'views/openacademy.xml',
        'views/partner.xml',
  openacademy/security/ir.model.access.csv
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
course_manager,course manager,model_openacademy_course,group_manager,1,1,1,1
session_manager,session manager,model_openacademy_session,group_manager,1,1,1,1
course_read_all,course all,model_openacademy_course,,1,0,0,0
session_read_all,session all,model_openacademy_session,,1,0,0,0
  openacademy/security/security.xml
<openerp>
    <data>
        <record id="group_manager" model="res.groups">
            <field name="name">OpenAcademy / Manager</field>
        </record>
    </data>
</openerp>
   

Record rules 记录规则

通过记录规则特定条件约束模型的权限。规则保存在ir.rule模型表里,需要设置关联某个模型,关联很多组,访问权限控制和domian。通过domain_force过滤出的一些记录来执行约束。   下面的例子,使销售经理只能删除状态为取消的客户线索。注意向many2many字段添加值的写法。
<record id="delete_cancelled_only" model="ir.rule">
    <field name="name">Only cancelled leads may be deleted</field>
    <field name="model_id" ref="crm.model_crm_lead"/>
    <field name="groups" eval="[(4, ref('base.group_sale_manager'))]"/>
    <field name="perm_read" eval="0"/>
    <field name="perm_write" eval="0"/>
    <field name="perm_create" eval="0"/>
    <field name="perm_unlink" eval="1" />
    <field name="domain_force">[('state','=','cancel')]</field>
</record>
  练习 为课程模型和OpenAcademy / Manager组添加一条记录规则,只有课程负责人可以编辑课程,如果课程没有负责人,任何人都可以编辑 openacademy/security/security.xml
        <record id="group_manager" model="res.groups">
            <field name="name">OpenAcademy / Manager</field>
        </record>
        <record id="only_responsible_can_modify" model="ir.rule">
            <field name="name">Only Responsible can modify Course</field>
            <field name="model_id" ref="model_openacademy_course"/>
            <field name="groups" eval="[(4, ref('openacademy.group_manager'))]"/>
            <field name="perm_read" eval="0"/>
            <field name="perm_write" eval="1"/>
            <field name="perm_create" eval="0"/>
            <field name="perm_unlink" eval="1"/>
            <field name="domain_force">
                ['|', ('responsible_id','=',False),
                      ('responsible_id','=',user.id)]
            </field>
        </record>
    </data>
</openerp>
  参考 https://www.odoo.com/documentation/8.0/howtos/backend.html#security 菜谱视频 1 介绍ir_model_data 2 xml语法 [(4, ref('base.group_sale_manager'))] 3 叠加组权限 4 v8 api
转载请注明出处
分享到: 更多 (0)

评论 0