在第一節(jié)中,我提出了一個(gè)最原始的需求,并定義了幾個(gè)接口。
在第二節(jié)中,我對這個(gè)需求進(jìn)行了一些細(xì)化,設(shè)計(jì)了一個(gè)數(shù)據(jù)結(jié)構(gòu)和一些基本的操作,可以滿足一些低層次的需求。在和 babituo 的討論中,他給我提出了一些更為具體和現(xiàn)實(shí)的需求,我想有必要再進(jìn)一步進(jìn)行抽象和設(shè)計(jì)。Babituo提到“如何針對動態(tài)創(chuàng)建的一篇文章進(jìn)行權(quán)限的控制”,及其他一些概念對我很有啟發(fā)。
目標(biāo):簡單的核心、簡單的定制(程序或是配置)、對于常見的情況會有通用的模板。簡單的修改可以應(yīng)付復(fù)雜的需求。學(xué)習(xí)struts。
首先是三個(gè)基本的元素:操作者(主)、操作(謂)、資源(賓)。
操作者指的是發(fā)出動作的主體,不一定指具體的人,也可以指一組人,或是指系統(tǒng)中的一個(gè)模塊,它應(yīng)該是系統(tǒng)唯一的,具有唯一的ID值。
操作指對資源進(jìn)行的動作,比如說打開、顯示等,同樣必須具有唯一的ID值。
資源指被操作的對象,可以指單個(gè)對象,比如某個(gè)菜單項(xiàng);也可以指某組對象,比如某組菜單。當(dāng)然這個(gè)某組菜單表現(xiàn)出來的也是單一的一個(gè)對象。
操作者權(quán)限的繼續(xù)
操作者的父級的權(quán)限是能被下級所繼續(xù)的,比如“小王”是“研發(fā)中心”的員工、那么除非明確說明某些權(quán)限是小王禁止使用的,研發(fā)中心所有的權(quán)限,小王都有。這里的繼續(xù)不是類的繼續(xù),而只是業(yè)務(wù)方面的一個(gè)繼續(xù)或是包含的關(guān)系。
新建資源的權(quán)限分配,例如:新建文章的操作權(quán)限問題
對于新建的文章一般創(chuàng)建者會具有對這篇文章的所有操作權(quán)限,所以我設(shè)計(jì)兩個(gè)類:新聞類NewsType和新聞類文章類News。新聞類只有一個(gè)實(shí)例:newsType,它的子女“新聞A NewsA”是對象是“新聞News”的實(shí)例。這里子女NewsA并沒有從父親newsType中繼續(xù)什么功能。“新聞類”具有一接口init(),表明每生成一個(gè)實(shí)例,就進(jìn)行一些初始化操作,這里我們可以定義自動將實(shí)例的操作權(quán)限賦給創(chuàng)建者。當(dāng)然,這需要定制程序。
新建的操作者的權(quán)限分配
這個(gè)和新建資源的權(quán)限分配類似,對于某操作者類會有一接口init(),描述新建一個(gè)實(shí)例時(shí)所要進(jìn)行的操作。
操作的組合
例如對于一篇文章的查看、修改、刪除操作統(tǒng)稱為對一篇文章的治理操作,具有對一篇文章治理操作的權(quán)限同時(shí)也具有對這篇文章查看、修改、刪除的權(quán)限。
新聞熱點(diǎn)
疑難解答
圖片精選