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
Đề 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ý Giả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 Bướ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) - Đố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ả Bướ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 Bướ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 Tạo 1 file sercurity_menu.xml trong thư mục sercurity với nội dung như sau Giả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 Giả 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 . (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