■宋寧琳
本文研究了一般公文管理系統(tǒng)中普遍需要實現(xiàn)的三個核心功能,分別是權(quán)限控制機制、公文群發(fā)機制和簽收機制,通過探討能夠使大家更深入的了解公文管理軟件的精髓。
隨著信息化時代的高速發(fā)展,基于網(wǎng)絡(luò)的信息管理平臺大量涌現(xiàn),給傳統(tǒng)的工作方式帶來了革命性變化。在各政府機關(guān)、企事業(yè)單位中,以公文流轉(zhuǎn)為核心的web辦公自動化系統(tǒng)(OA)應(yīng)用已較為廣泛。于此同時,也涌現(xiàn)出很多公文管理軟件,它們的功能各有特色,但其核心功能都是相似的。本文希望通過權(quán)限控制機制的實現(xiàn)、公文群發(fā)機制和簽收機制探討能夠使大家更深入的了解公文管理軟件的精髓。
在介紹三種關(guān)鍵技術(shù)之前,首先介紹一下本系統(tǒng)的開發(fā)平臺。本系統(tǒng)的軟件平臺采用開源的LAMP組合技術(shù),并使用免費的Ajax類庫XAjax實現(xiàn)部分異步通信功能。服務(wù)器主要軟件配置如下:
(1)服務(wù)器操作系統(tǒng)采用Linux系統(tǒng),版本為Red Hat Enterprise Linux 5.0,其內(nèi)核為2.6.18,具有支持Xen虛擬化技術(shù),集群存儲等。
(2)Web發(fā)布軟件采用Apache,其版本為2.2。
(3)系統(tǒng)開發(fā)語言采用PHP,其版本為5.2.6。
(4)網(wǎng)絡(luò)數(shù)據(jù)庫采用MySQL,其版本為5.0.21。
(5)異步通信采用XAjax。
(1)權(quán)限存儲策略
本系統(tǒng)中,用戶權(quán)限控制是實現(xiàn)整個系統(tǒng)正常操作流程的重要基礎(chǔ)和技術(shù)重點。下面從權(quán)限的存儲策略、權(quán)限驗證策略、技術(shù)實現(xiàn)三個方面介紹本用戶權(quán)限控制機制的原理。
首先將抽象的“權(quán)限”概念具體化,將系統(tǒng)中所有需要經(jīng)過權(quán)限認證才能進行的操作進行分類、細化,概括成若干個獨立的、具體的權(quán)限。給出權(quán)限的文字描述,實現(xiàn)權(quán)限和程序之間的一一對應(yīng)。并對每個權(quán)限進行編號。本系統(tǒng)的權(quán)限設(shè)置和編號情況如圖所示。權(quán)限編號完畢后,將權(quán)限編號、權(quán)限名稱、權(quán)限描述存入一個配置文件中。配置文件主要包括高級用戶管理權(quán)限、普通用戶管理權(quán)限、個人帳號管理、自定義發(fā)文群組管理、審批發(fā)文群組、內(nèi)部發(fā)文群組管理、公共普發(fā)信息管理和手機短信管理等內(nèi)容。
在用戶基本信息表中,設(shè)置一個專用字段privlist,類型為text,可以支持極高長度的文本,本字段用于存放本用戶的權(quán)限列表。在用戶權(quán)限設(shè)置頁面中,使用PHP的文本操作函數(shù)庫,打開本配置文件,使用循環(huán)逐行讀取文件內(nèi)容,然后使用字符串處理函數(shù)將一行內(nèi)容分割為數(shù)組,然后將當前權(quán)限輸出。
(2)權(quán)限驗證策略
在這里,設(shè)計一個專門的PHP函數(shù)實現(xiàn)權(quán)限驗證。
Boolean function checkpriv($privid);
本函數(shù)接收一個權(quán)限ID,判斷當前登錄的用戶是否具有此權(quán)限。其方法是:
①檢查$privid是否大于0,是則進入②,否則返回false;
②從SESSION中取出當前登錄用戶的privlist,使用explode()函數(shù)將其處理成數(shù)組。
$arr=explode(“|”,$privlist);
③使用in_array()函數(shù)判斷$privid是否是$arr中的一個元素,如果是則返回true,否則返回false;
④函數(shù)結(jié)束。
(3)技術(shù)實現(xiàn)
①PHP讀取文本類型的配置文件。本操作使用PHP提供的文件操作函數(shù),打開文本文件流,每次讀取一行,循環(huán)處理直至文件末尾。具體實現(xiàn)代碼概要如下:
②前臺用戶權(quán)限的序列化。在用戶權(quán)限設(shè)置、修改等頁面中,需要將所有權(quán)限以下拉列表方式列出,管理員對用戶的權(quán)限進行增刪操作,操作完畢后點擊提交。在點擊提交之后和發(fā)生提交之前,使用Javascript將所有已選權(quán)限(列在一個動態(tài)的下拉列表中)序列化為一個以“|”分割的字符串,并將這個字符串賦值給一個事先設(shè)置好的hidden表單中,與整個表單值一起提交到服務(wù)器。這個Javascript函數(shù)的技術(shù)實現(xiàn)如下:
其他技術(shù)實現(xiàn)細節(jié)不再贅述。
(1)公文群發(fā)機制的實現(xiàn)
一般而言,在Web系統(tǒng)設(shè)計中,對于群發(fā)信息一般采取兩種方式:一種是向每個用戶發(fā)送一份信息的拷貝。一旦發(fā)出無法撤回,接收者可以對信息進行各種操作包括刪除,這種機制類似于電子信箱。這種方式下發(fā)送者無法或者很難掌握已發(fā)出信息的狀態(tài)。第二種方式是只在服務(wù)器上存儲一份信息的拷貝,所有用戶共用這個拷貝。這種方式的好處是可以大大減少存儲空間,同時便于管理,發(fā)送者可以隨時跟蹤所發(fā)信息的狀態(tài)。
根據(jù)系統(tǒng)需求等綜合考慮,本系統(tǒng)采用后一種方式開發(fā)。在具體實現(xiàn)上,為每一個文件設(shè)置一個memberlist字段和一個responlist字段。Memberlist字段用來存儲所有收文用戶的ID序列,responlist存儲未簽收的用戶ID序列。按以下步驟進行發(fā)文操作:
①發(fā)送公文第一步,輸入公文基本屬性(標題、文號、內(nèi)容等)。點擊提交后將本基本信息插入公文數(shù)據(jù)表,在公文數(shù)據(jù)表中插入一條新記錄,產(chǎn)生本文件的唯一編號(ID),并將文件狀態(tài)初始化為1(編輯狀態(tài))。并將文件ID傳入下一步。
②發(fā)送公文第二步,添加和編輯附件。在附件設(shè)置完畢后,根據(jù)上一步傳遞過來的文件ID,將附件信息寫入附件數(shù)據(jù)表,并繼續(xù)將文件ID傳入下一步。
③發(fā)送公文第三步,選擇收文用戶。用戶選擇方式仍采用下拉列表,允許按不同群組選擇。用戶選擇完畢后,生成用戶ID的字符串(與權(quán)限管理功能原理相同),將字符串存入本文件的memberlist字段,同時將responlist字段也初始化為同樣的值。繼續(xù)將文件ID傳入下一步。
④確認發(fā)文。提示用戶是否確認發(fā)送文件,如果確定,則將文件的狀態(tài)更新為2(已發(fā)送),并將發(fā)文時間字段更新為當前時間。如果否,則轉(zhuǎn)入草稿箱。
⑤提示用戶是否發(fā)送短信通知。如果是,則發(fā)送短信,否則不發(fā)送。
由于所有收文用戶的ID都被存儲在了文件的memberlist字段中,因此實現(xiàn)了集約式的公文群發(fā)。用戶只需通過必要的操作檢索數(shù)據(jù)庫,即可知道哪些公文是發(fā)送給自己的。
(2)公文簽收機制的實現(xiàn)
對終端用戶而言,收文分為未讀文件、已讀文件和全部文件三種情況。收文按照以下思路和步驟進行:
①從SESSION中取得當前用戶的ID。
②查詢文件數(shù)據(jù)表,根據(jù)查詢文件類型不同,分為三種方式:
未讀文件:搜索memberlist中包含ID、responlist中也包含ID的記錄。對應(yīng)的SQL概念語句為:select[]from[]where LOCATE(‘|用戶ID|’,memberlist)!=-1 and LOCATE(‘|用戶ID|’,responlist)!=-1 ……
已讀文件:搜索memberlist中包含ID,responlist中不包含ID的記錄。對應(yīng)的SQL概念語句為:select[]from[]where LOCATE(‘|用戶ID|’,memberlist)!=-1 and LOCATE(‘|用戶ID|’,responlist)=-1 ……
全部文件:搜索memberlist中包含ID的記錄。對應(yīng)的SQL概念語句為:select[]from[]where LOCATE(‘|用戶ID|’,memberlist)!=-1……
③循環(huán)輸出文件列表。
④收文結(jié)束。
未讀文件的簽收方法為:使用REPLACE語句,對文件數(shù)據(jù)表中指定文件的responlist值進行替換,將當前用戶ID替換為空。其對應(yīng)的SQL概念語句為;
UPDATE[]set responlist=REPLACE(‘|用戶ID|’,’’,responlist)where id=文件ID
在本文中,作者研究了基于B/S模式的公文系統(tǒng)中的三項重要技術(shù),很好的解決了開發(fā)中的難題,其中運用到了PHP腳本語言和SQL語言,因此該模塊具有良好的跨平臺性,特別是權(quán)限控制,為開發(fā)其他的管理信息系統(tǒng)提供了很好的參考價值。
[1]張玉琢.基于軟件體系結(jié)構(gòu)的軟件重用技術(shù)[J].云南:云南師范大學學報(自然科學版),1999(06).
[2]聶慶鵬,毛書朋.PHP+MySQL動態(tài)網(wǎng)站開發(fā)與全程實例[M].北京:清華大學出版社,2007.
[3]劉新濤.軟件體系結(jié)構(gòu)分析與評估方法研究[D].哈爾濱:哈爾濱工程大學,2006.