Hi anh em,

Hiện tại minh đang rất khó khăn với việc xử lý quyền cho các module trong module.

Trước mắt mình hỏi mấy câu, anh em nào biết chỉ giúp với:

1. Record Rule có đè lên Access Rule không ?

2. Record Rule chỉ dùng để lọc dữ liệu hiển thị ra ngoài ?

3. Record Rule có thể dùng để tăng hoặc giảm mức quyền ? hay cả hai ?

4. Cách dùng toán tử để check 1 phần tử thuộc 1 danh sách ntn nhỉ ? VD: ('member_ids', 'contain', user.id)

Mình đang muốn thực hiện vấn đề sau:

Module của mình định viết để quản lý dự án (projects), có 3 group: User, , Accountant, Manager. Mình chỉ đang làm việc với group User. Mình có 1 danh sách thành viên (member: many2many) và một  người quản lý (manager).

Mình muốn thiết lập quyền theo cách sau: tất cả member của group user chỉ có thể xem các projects mà họ là thành viên. Người manager thì có thể xem và sửa project mình quản lý.

 

Mình đã thử dùng access rule để thiết lập quyền xem và sửa cho nhóm Project/User như sau:

What I have tried that far:
Using an access rule to give the Project/User group read and write access. Creating the following record rules:

<record model="ir.rule" id="project_project_user_rule">
             <field name="name">Project: User is Member</field>
             <field name="model_id" ref="model_project_project"></field>
             <field name="groups" eval="[(4,ref('project.group_project_user'))]"></field>
             <field name="domain_force">[('member_ids', 'in', user.employee_ids[0].id)]</field>
             <field eval="1" name="perm_read"></field>   
             <field eval="0" name="perm_write"></field> 
             <field eval="0" name="perm_unlink"></field>
             <field eval="0" name="perm_create"></field>
     </record>    

     <record model="ir.rule" id="project_project_user_manager_rule">
             <field name="name">Project: User is Manager</field>
             <field name="model_id" ref="model_project_project"></field>
             <field name="groups" eval="[(4,ref('project.group_project_user'))]"></field>
             <field name="domain_force">[('manager_id', '=', user.employee_ids[0].id)]</field>
             <field eval="1" name="perm_write"></field>
             <field eval="1" name="perm_read"></field>
             <field eval="0" name="perm_unlink"></field>
             <field eval="0" name="perm_create"></field>
     </record>

Tuy nhiên kết quả lại khá bí ẩn.

Danh sách dự án chỉ hiển thị ra những dự án nào mà user đang truy cập hiện tại là member hoặc là quản lý (đúng như mình muốn)

Những dự án mà user là quản lý (manager) thì có thể xem và sửa (cũng đúng như mình muốn)

Những dự án mà trong đó user là thành viên thì không truy cập được (lỗi access denied) (cái này mình không mong muốn)

Mình cũng đã thử viết như sau nhưng cũng không ăn thua:

 

             [('member_ids', '=', user.employee_ids[0].id)]
             [('member_ids.user_id', '=', user.id)]