(11)odoo許可權機制

來源:互聯網
上載者:User

標籤:

*存取權限管理:
  對於其內的資料存取權限管理有兩種機制:
  第一種是模型存取權限管理 (accessrule);
  第二種是記錄規則管理 (record rule)。
  record rule 是對accessrule的細化
  如果不為模組設定規則,預設只有Administator才能訪問這個模型的資料
  record rule 對 Administator 使用者是無效的,而access rule還是有效
  
  # access rule
   一般是放在security 檔案夾下的 ir.model.access.csv 檔案來管理的
   檔案表頭如下:
   id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
  
   來一個例子:
   id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
   access_todo_task_group_user,todo.task.user,model_todo_task,base.group_user,1,1,1,1
  
       模型名todo.task  model_id:id對應的就是 model_todo_task 這是規定死的
       id,name 名字隨意取,但還是規則一些
       group_id:id 是群組
       下面的,0 表示無許可權, 1 表示有許可權
       perm_read  讀
       perm_write 寫
       perm_create 建
       perm_unlink 刪除
      
  # record rule    
     一般是放在security 檔案夾下的 模組名_record_rules.xml 檔案來管理的
    <?xml version=”1.0” encoding=”utf-8”?>
    <openerp>
        <data noupdate=”1”>
            <record id=”todo_task_user_rule” model=”ir.rule”>
                <field name=”name”>ToDo Tasks only for owner</field>
                <field name=”model_id” ref=”model_todo_task”/>
                <field name=”domain_force”>[(’create_uid’,’=’,user.id)]</field>
                <field name=”groups” eval=”[(4,ref(’base.group_user’))]”/>
            </record>
        </data>
    </openerp>   

    record rule    記錄是 ir.rule 模型, 存在public.ir_rule 表格中
    model_id 作用於哪個模型
    domain_force 對該模型中所有記錄進行某種過濾操作
    noupdate 值為1 表示升級模組不會更新本資料
    base.group_user 是人力資源 / 僱員
   
   
* 來一個完整的例子解說:

   # 建立組
    <record id="group_department_project_admin" model="res.groups">
    <field name="name">A</field>
    <fieldname="category_id" ref="B"/>
    <field name="users" eval="[(4, ref(‘base.user_root‘))]"/> //把admin使用者加入該組中
    </record>

    @ name 組名稱
    @ category_id 屬於哪個應用程式,或者哪個模組
    @ users 組裡面的使用者
    這樣B應用程式就建立了一個名叫A的組。並且初始化了A組的一個使用者admin
   
   # 組控制功能表顯示
    A

    <record model="ir.ui.menu" id=" memu_id1">
        <field name="name" >menu1</field>
        <field name="groups_id" eval="[(6,0,[ref(‘A‘),ref(‘B‘)]),]"/>          
        <field name="sequence">1</field>
    </record>

    @ name 菜單名稱
    @ groups_id 哪些組可以訪問該菜單
    @ sequence 該菜單的序號
    這樣A組與B組的成員都可以訪問menu1菜單,menu1菜單的顯示順序為1
    註:eval 後面解釋,多個組訪問用“,”隔開   
   
    <menuitem id="menu_id2 " name="menu2" parent="menu_id1" sequence="1" groups="A,B "/>
    @ name 菜單名稱
    @ parent 父類菜單 如果沒有可以不寫parent
    @ groups哪些組可以訪問該菜單
    這樣menu1的子功能表menu2可以被A組合B組的成員訪問
   
   # 許可權規則
    <record model="ir.rule" id="rule1">
        <field name="name">rule1</field>
        <field name="model_id" ref="model_model1"/>
        <field name="global" eval="True"/>
        <field name="domain_force">[1,’=’,1]</field>
        <field name="groups" eval="[(4,ref(‘A‘))]"/>
    </record>

    @ name 規則名稱
    @ model_id 依賴的模組
    @ global 是否是全域
    @ domain_force 過濾條件
    @ groups 屬於哪個組

    這樣A組的成員就可以取到model_model1的所有資料
   
   # ir.model.access.csv
    @id 隨便取
    @name 隨便取
    @model_id:id 這個就是你所定義的對象了
    @group_id:哪個組
    @perm_read","perm_write","perm_create","perm_unlink" 增刪改查許可權了。1代表有許可權
   
   
   # Eval

    many2many
    (0,0,{values}) 根據values裡面的資訊建立一個記錄。
    (1,ID,{values})更新id=ID的記錄(寫入values裡面的資料)
    (2,ID) 刪除id=ID的資料(調用unlink方法,刪除資料以及整個主從資料連結關係)
    (3,ID) 切斷主從資料的連結關係但是不刪除這個資料
    (4,ID) 為id=ID的資料添加主從連結關係。
    (5) 刪除所有的從資料的連結關係就是向所有的從資料調用(3,ID)
    (6,0,[IDs]) 用IDs裡面的記錄替換原來的記錄(就是先執行(5)再執行迴圈IDs執行(4,ID))

    例子[(6, 0, [8, 5, 6, 4])] 設定 many2many to ids [8, 5, 6, 4]
    one2many
    (0, 0,{ values })根據values裡面的資訊建立一個記錄。
    (1,ID,{values}) 更新id=ID的記錄(對id=ID的執行write 寫入values裡面的資料)
    (2,ID) 刪除id=ID的資料(調用unlink方法,刪除資料以及整個主從資料連結關係)
    例子:
    [(0,0,{‘field_name‘:field_value_record1,...}),(0,0,{‘field_name‘:field_value_record})]
    many2one的欄位比較簡單,直接填入已經存在的資料的id或者填入False刪除原來的記錄。
   
   # 隱藏的常用技巧

    * 直接隱藏
     <group name="owner" position="attributes">
            <attribute name="invisible">True</attribute>
     </group>

    * 滿足某些條件的隱藏

    <xpath expr="//field[@name=‘parent_id‘]" position=‘attributes‘>
     <attribute name="attrs">{‘invisible‘: [(‘passenger‘,‘=‘, True)]}</attribute>
    </xpath>

    <group col="4" string=‘旅客資訊‘ attrs="{‘invisible‘: [(‘supplier‘,‘=‘, True)]}"></group>

     * 通過組來隱藏
     <xpath expr="//field[@name=‘type‘]" position="attributes">
        <attribute name="groups">base.group_no_one</attribute>
     </xpath>

    * 菜單的隱藏
      <record model="ir.ui.menu" id="crm.menu_crm_opportunities">
            <field eval="[(6,0, [ref(‘base.group_no_one‘),])]" name="groups_id"/>
      </record>

(11)odoo許可權機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.