iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Odoo

利用【AI】工具,聰明進行 Odoo 程式開發系列 第 12

Day12:個案一:學校圖書管理(8)-學生與系統管理者權限

  • 分享至 

  • xImage
  •  

使用者故事

作為一名學生或系統管理者,我希望能在登入時袛看到我能看到的功能或選單

1.在權限組category新增 圖書館系統
2.【圖書館系統】權限選擇,有二個權限 學生 (繼承內部使用者)及 系統管理者(繼承學生)
3.學生袛能看到menu_library_books_readonly
4.系統管理者能看到全部選單
5.在學生新增時,給予group_library_student 及預設密碼

ChatGPT回應

為了實現您提到的需求,這裡是具體的步驟和實作方式,涵蓋權限組的設置和菜單控制:

1. 在權限組 category 中新增「圖書館系統」

我們首先需要在 ir.module.category 中新增一個 圖書館系統 權限分類,這個分類將用於圖書館的功能模組中。

<odoo>
    <record id="module_category_library_management" model="ir.module.category">
        <field name="name">圖書館系統</field>
        <field name="description">管理圖書館系統的權限</field>
        <field name="sequence">10</field>
    </record>
</odoo>

2. 新增兩個權限組:學生和系統管理者

2.1. 學生權限組:繼承內部使用者

  • 學生權限組僅能查看 menu_library_books_readonly
<odoo>
    <!-- 學生權限組 -->
    <record id="group_library_student" model="res.groups">
        <field name="name">學生</field>
        <field name="category_id" ref="module_category_library_management"/>
        <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> <!-- 繼承內部使用者 -->
    </record>
</odoo>

2.2. 系統管理者權限組:繼承學生權限

  • 系統管理者可以查看所有圖書館系統的選單,並繼承學生權限。
<odoo>
    <!-- 系統管理者權限組 -->
    <record id="group_library_admin" model="res.groups">
        <field name="name">系統管理者</field>
        <field name="category_id" ref="module_category_library_management"/>
        <field name="implied_ids" eval="[(4, ref('group_library_student'))]"/> <!-- 繼承學生權限 -->
    </record>
</odoo>

3. 設置菜單權限控制

3.1. 學生菜單控制

  • 學生僅能看到 menu_library_books_readonly
<odoo>
    <menuitem id="menu_library_books_readonly" name="書籍查詢" action="action_library_books_readonly"
              groups="group_library_student"/>
</odoo>

3.2. 系統管理者菜單控制

  • 系統管理者可以看到所有圖書館系統的菜單,因此不需要特別控制這部分的顯示。

4. 自動分配學生權限和預設密碼

當新增學生時,自動分配 group_library_student 權限組,並設置預設密碼。

4.1. library.student 模型中新增權限與預設密碼功能

from odoo import models, fields, api

class LibraryStudent(models.Model):
    _name = 'library.student'
    _inherit = ['mail.thread']

    name = fields.Char(string='學生姓名', required=True)
    user_id = fields.Many2one('res.users', string='系統用戶')

    @api.model
    def create(self, vals):
        # 在創建學生時,為其分配一個用戶並自動分配學生權限組和預設密碼
        user_vals = {
            'name': vals.get('name'),
            'login': vals.get('email'),  # 假設使用 email 作為登入名
            'password': '123456',  # 設置預設密碼
            'groups_id': [(6, 0, [self.env.ref('module.group_library_student').id])],  # 分配學生權限組
        }
        user = self.env['res.users'].create(user_vals)
        vals['user_id'] = user.id
        return super(LibraryStudent, self).create(vals)

本章結語

主要達成目的

  1. 新增「圖書館系統」權限分類:為了確保圖書館系統的權限管理能夠與其他模組區分開來,我們新增了一個專屬的權限分類,以便能夠更細緻地控制學生和系統管理者的權限。

  2. 創建兩個權限組:我們針對不同的角色需求,設置了「學生」和「系統管理者」兩個權限組。學生僅能查看 menu_library_books_readonly,而系統管理者則擁有查看及操作所有功能的權限,確保角色分工明確,權限控制精準。

  3. 自動分配權限組與預設密碼:透過自動化流程,當新增學生資料時,系統將自動分配該學生至「學生」權限組,並且自動設置預設密碼,簡化了管理流程,提高了用戶管理的效率。

ChatGPT 回應問題及修改記錄

在實現過程中,一定會有差異,修改記錄已經提交並展示於以下 GitHub 項目中,讀者可參考此修改歷程以便進一步了解具體的問題修正與功能增強。

GitHub 詳細修改記錄:
https://github.com/kulius/odoo17_ithelp

Odoo 權限調整重點

  1. 權限的繼承與分類:Odoo 的權限設定依賴於不同權限組之間的繼承關係,我們依照業務需求,將「學生」權限組繼承自內部使用者,並使「系統管理者」權限組繼承自學生。這樣的設計確保了基礎權限可以共享,而進階權限則被更高級別的管理者掌控。

  2. 選單項目可見性控制:可見性基於使用者的權限組進行控制,這樣可以有效防止低權限的使用者存取高敏感度的功能。

  3. 自動分配與預設值:為了減少管理員手動設置權限與密碼的負擔,我們在學生新增流程中加入了自動分配權限組和預設密碼的功能。

總結

這一章的權限設置不僅提升了系統的安全性和可管理性,還通過自動化的設置大大減輕了管理員的工作負擔。確保學生和管理者在登入時只會看到自己應該看到的功能和選單。這樣的設計有效提升了系統的使用體驗,同時也確保了系統的安全運作。


上一篇
Day11:個案一:學校圖書管理(7)-學生預約書藉
下一篇
Day13:個案一:學校圖書管理(9)-學生借書及訂閱記錄
系列文
利用【AI】工具,聰明進行 Odoo 程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言