Lập trình Odoo (OpenERP): Thực hành Xây dựng module Phân quyền trong OdooOpenERPĐề tài: Xây dựng module quản lý sinh viên Giúp các bạn tạo ra một module đầu tiên Tạo đối tượng (model) Tạo view Phân quyền
Trang 1Đề tài: Xây dựng module quản lý sinh
viên (TT)
Lab 03 – Phân quyền
Input:
- Tạo module quản lý sinh viên
- Tạo được 3 đối tượng x_khoa, x_nganh, x_sinhvien
- Tạo được các menu và view cho x_khoa, x_nganh, x_sinhvien
Output:
- Tạo group user
- Phân quyền trên các view
Tạo group user
Bước 1: Tạo thư mục sercurity trong module quanly_sinhvien
Bước 2: Tạo 1 file sercurity_data.xml trong thư mục quanly_sinhvien/ sercurity
Bước 3: Tạo 1 category sẽ chứa các group trong module của chúng ta
Mỗi một module nên tạo 1 category để dễ quản lý
Trang 2Giải thích:
- Dòng 1, 2, 3, 8, 9: khai báo các thẻ mặc định của Odoo Nội dung của file XML sẽ nằm trong thẻ <data>
- Dòng 4: Thẻ record với model là ir.module.category tạo 1 category chứa các group
Với id phải duy nhất, không trùng với các module khác
- Dòng 5, 6: Khai báo tên của category và thứ tự xuất hiện của nó
Lưu ý: Vì chúng ta chưa tạo group user nên category này vẫn chưa xuất hiện
Bước 4: Tiếp tục khai báo để tạo 1 group user Sinh viên trong file sercurity_data.xml
Giải thích:
- Tạo 1 thẻ record với model là ir.groups có thuộc tính id là Id của group user (phải duy nhất)
- Bên trong thẻ record chúng ta thẻ field để khai báo tên và category của group user đó
Bước 5: Khai báo file sercurity_data.xml trong thuộc tính update_xml của file
openerp .py để Odoo khởi tạo group user
Trang 3Bước 6: restart service và upgrade module
Bước 7: kiểm tra kết quả
Group user sẽ được thể hiện trong thẻ Access Rights của mỗi User
Để truy cập vào user ta vào menu Settings Users Chọn user cần phân quyền trên tree view
Phân quyền group user cho các model
Yêu cầu bài toán với từng nhóm đối tượng
- Đối tượng sinh viên chỉ được xem và chỉnh sửa các thông tin về sinh viên (không được xóa và tạo mới)
Trang 4- Đối tượng giáo viên chỉ được xem và chỉnh sửa các thông tin về sinh viên và thông tin ngành (không được phép xóa và tạo mới)
- Đối tượng giáo vụ có thể xem, xóa, chỉnh sửa và tạo mới toàn bộ thông tin về sinh viên, khoa, ngành
Bước 1: Tạo 1 file ir.model.access.csv trong thư mục quanly_sinhvien/sercurity với nội
dung sau
Phân quyền cho nhóm người dùng sinh viên trên 3 đối tượng x_sinhvien, x_khoa, x_nganh
Giải thích:
- Với nội dung trên, chúng ta đang phân quyền cho nhóm người dùng sinh viên (group_sinhvien) trên 3 đối tượng nghiệp vụ (x_sinhvien, x_khoa, x_nganh)
Hệ thống có 3 nhóm người dùng (sinhvien, giaovien, giaovu) và 3 đối tượng nghiệp vụ, vậy chúng ta phải có tổng cộng 9 dòng dữ liệu để phân quyền cho tất cả nhóm người dùng (3x3=9)
- Lưu ý ở dòng 4: nhóm sinh viên có thể xem được đối tượng x_nganh
(perm_read=1) vì trong đối tượng sinh viên chúng ta có 1 field many2one đến x_nganh, nếu không cho phép nhóm sinh viên read x_nganh thì sẽ báo lỗi
Bước 2: Khai báo file ir.model.access.csv trong thuộc tính update_xml của file
openerp .py để Odoo khởi tạo phân quyền
Bước 3: restart service và upgrade module
Bước 4: kiểm tra kết quả
Trang 5Bước 4.1: Tạo 1 user mới và phân quyền là thuộc nhóm sinh viên
Vào settingsusersbấm create để tạo mới
Bước 4.2: Thay đổi password cho user vừa tạo
Trang 6Bước 4.3: Đăng nhập vào tài khoản vừa tạo chúng ta sẽ thấy user thuộc nhóm người
dùng là sinh viên chỉ hiện ra menu Quản lý sinh viên/Sinh viên và Phân ban/Ngành (vì được phép xem đối tượng x_nganh)
Phân quyền group user trên view
Giả sử chúng ta thêm yêu cầu: Các sinh viên chỉ được nhìn thấy menu Quản lý sinh
viên/Sinh viên và không được nhìn thấy thuộc tính Trang thái trong đối tượng x_sinhvien
Chúng ta sẽ tiến hành phân quyền cho nhóm người dùng sinh viên trên các view và menu
Bước 1: Phân quyền trên menu
Trang 7Tạo 1 file sercurity_menu.xml trong thư mục sercurity với nội dung như sau
Trang 8Giải thích:
- Nhiệm vụ của đoạn code trên là cập nhật lại thông tin của menu ngành (có id là
“menu_qlsv_phanban_nganh”)
Chúng ta phải tạo menu ngành trước rồi mới phân quyền
- Giá trị thuộc tính eval (đi kèm với nam=”groups_id”) có nghĩa là chúng ta chỉ cho phép 2 nhóm người dùng giáo viên và giáo vụ xem được menu Ngành Ngoài ra tất cả các nhóm người dùng khác thì không được phép nhìn thấy
Bước 2: Khai báo file sercurity_menu.xml trong thuộc tính update_xml của file
openerp .py để Odoo khởi tạo phân quyền cho menu
Bước 3: restart service và upgrade module
Bước 4: Kiểm tra kết quả: Load lại trang đăng nhập với tài khoản sinh viên chúng ta sẽ
thấy menu Ngành đã được ẩn đi
Trang 9Giả sử chúng ta thêm yêu cầu: Các sinh viên không được nhìn thấy field trạng thái
Bước 1: Mở file view/sinhvien.xml và đoạn code để giới hạn quyền truy cập vào 1 file
trên form view sinh viên
Ta thêm thuộc tính groups mang ý nghĩa: field state (trạng thái) chỉ được thấy bởi
2 nhóm người dùng là giáo viên và giáo vụ (Lưu ý: Lab2_Demo là tên của thư mục gốc, nơi đã tạo ra 2 nhóm người dùng group_giaovien và group_giaovu)
Bước 2: Upgrade module
Bước 3: Kiểm tra kết quả: Load lại trang đăng nhập với tài khoản sinh viên truy cập
vào 1 recode bất kì của sinh viên chúng ta sẽ thấy field trạng thái đã bị ẩn đi