成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

途牛原創(chuàng)|途牛無(wú)線權(quán)限系統(tǒng)的架構(gòu)設(shè)計(jì)與實(shí)踐

姘擱『 / 1186人閱讀

摘要:認(rèn)為權(quán)限授權(quán)實(shí)際上是的問(wèn)題。具體的權(quán)限,正向授權(quán)與負(fù)向授權(quán)。應(yīng)用建模業(yè)務(wù)場(chǎng)景權(quán)限管理鑒權(quán)設(shè)計(jì)應(yīng)用建模系統(tǒng)架構(gòu)上支撐權(quán)限系統(tǒng)靈活配置,不僵硬字段,不僵硬行為,基于各種業(yè)務(wù)權(quán)限管控的特征靈活設(shè)計(jì)。表示許可權(quán)與角色之間多對(duì)多的指派關(guān)系。

之前寫過(guò)一篇大話權(quán)限中心的PHP架構(gòu)之道,主要是從軟件工程角度介紹,如何通過(guò)編碼規(guī)范、依賴管理、數(shù)據(jù)源架構(gòu)、事務(wù)處理、單元測(cè)試等技術(shù),來(lái)保障權(quán)限系統(tǒng)的高可用,并未真正的涉及這套系統(tǒng)的架構(gòu)。

今天準(zhǔn)備從設(shè)計(jì)細(xì)節(jié)上分享一二。

望各位看官,心有“空杯”,帶著“問(wèn)題”一探究竟。

0. RBAC3

這里還是尤為的重要,因?yàn)樗钦紫到y(tǒng)設(shè)計(jì)的根基。

所以殘忍的從上一篇中復(fù)制了一遍。。。

RBAC認(rèn)為權(quán)限授權(quán)實(shí)際上是Who、What、How的問(wèn)題。在RBAC模型中,who、what、how構(gòu)成了訪問(wèn)權(quán)限三元組,也就是“Who對(duì)What(Which)進(jìn)行How的操作”。

Who:權(quán)限的擁用者或主體(如Principal、User、Group、Role、Actor等等)

What:權(quán)限針對(duì)的對(duì)象或資源(Resource、Class)。

How:具體的權(quán)限(Privilege,正向授權(quán)與負(fù)向授權(quán))。

Operator:操作。表明對(duì)What的How操作。也就是Privilege+Resource

Role:角色,一定數(shù)量的權(quán)限的集合。權(quán)限分配的單位與載體,目的是隔離User與Privilege的邏輯關(guān)系.

權(quán)限系統(tǒng)的本質(zhì)就是這個(gè)模型(個(gè)人觀點(diǎn)勿噴)。我們?cè)诖撕诵乃枷肷?,抽象了兩個(gè)新概念。

應(yīng)用建模、權(quán)限自治

下面將從以下4個(gè)層面展開(kāi)介紹。

應(yīng)用建模

業(yè)務(wù)場(chǎng)景

權(quán)限管理

鑒權(quán)設(shè)計(jì)

1. 應(yīng)用建模

系統(tǒng)架構(gòu)上支撐權(quán)限系統(tǒng)靈活配置,不僵硬字段,不僵硬行為,基于各種業(yè)務(wù)權(quán)限管控的特征靈活設(shè)計(jì)。

公式一枚:應(yīng)用=資源+行為+角色

1.1 字段定義

簡(jiǎn)單點(diǎn)說(shuō),就是要管控資源的屬性和行為

比如要管控菜單,屬性就包括菜單ID、菜單名稱、菜單URL、菜單ICON、上級(jí)菜單ID等,行為就包括訪問(wèn)、授權(quán)等。(菜單權(quán)限)

比如要管控城市,屬性就包括區(qū)域ID、區(qū)域名稱、區(qū)域代碼、所屬區(qū)域ID等,行為就包括訪問(wèn)、授權(quán)等。(區(qū)域權(quán)限)

比如要管控CMS,字段就包含頁(yè)面ID、頁(yè)面名稱等,行為就包括訪問(wèn)、授權(quán)、編輯、重置等。(CMS數(shù)據(jù)權(quán)限)

按照慣性的思維,這里就是3張資源表對(duì)應(yīng)角色表,同時(shí)還有3張資源角色關(guān)系表,換而言之,就是有多少資源需要管控就有多少?gòu)埍恚ㄓ质莻€(gè)人觀點(diǎn),勿噴)。

慣性的思維,兩個(gè)痛點(diǎn)。

每一種資源都要獨(dú)立存儲(chǔ)。

每一種資源都要有一套Form排版&交互&存儲(chǔ)實(shí)現(xiàn)。

為了解決這個(gè)問(wèn)題,我們做了以下的設(shè)計(jì)。

字段建模

任意資源的字段,都可以抽象成如下幾類。

資源映射字段(mapField)

資源節(jié)點(diǎn)字段(treeFiled)

資源系統(tǒng)字段(systemFields)

資源表單字段(columns)

資源行為字段(privileges)

舉個(gè)栗子:菜單資源。

class menu extends app
{
    public static $appMapField = "url";
    public static $appTreeField = "name";
    public static $columns = array(
        array(
            "id" => "id",
            "label"  => "菜單ID",
            "type"  => "input",
            "format" => "int",
            "option" => array()
        ),
        array(
            "id" => "name",
            "label"  => "菜單名稱",
            "type"  => "input",
            "format" => "string",
            "option" => array()
        )
    );
    public static $privileges = array(
        array(
            "id"    => "access",
            "name"  => "訪問(wèn)"
        )
    );
    public static $systemFields = array("id", "parent_id");
}
動(dòng)態(tài)表單

表單在網(wǎng)頁(yè)中主要負(fù)責(zé)數(shù)據(jù)采集功能。一個(gè)表單有三個(gè)基本組成部分:

表單標(biāo)簽;

表單域,包含了文本框、密碼框、隱藏域、多行文本框、復(fù)選框、單選框、下拉選擇框和文件上傳框等;

表單按鈕。

常規(guī)工作是靜態(tài)表單。

設(shè)計(jì)動(dòng)態(tài)表單模型,基本的思路應(yīng)該是數(shù)據(jù)和表現(xiàn)顯示的分離。拋開(kāi)表現(xiàn)層,一個(gè)表單包含的若干個(gè)字段和填寫的數(shù)據(jù)。所謂動(dòng)態(tài),就是這些字段名稱可能改變,數(shù)量可能有增減。

通過(guò)資源的columns字段控制表現(xiàn)層。

通過(guò)資源的數(shù)據(jù)字段控制數(shù)據(jù)層。

通過(guò)這種模式,任意資源的Form排版&交互&存儲(chǔ)都動(dòng)態(tài)實(shí)現(xiàn)了。

1.2 數(shù)據(jù)存儲(chǔ)

資源表對(duì)應(yīng)的Schema如下:

字段名稱 字段備注
應(yīng)用ID /
資源ID /
資源父ID /
資源Data JSON

通過(guò)反射API,獲取當(dāng)前應(yīng)用的資源存儲(chǔ)插件(資源Data字段)。

app::find($params["app_id"])->getResoucePlugin()->save($params["data"]);

通過(guò)資源基類做數(shù)據(jù)存儲(chǔ)的統(tǒng)一封裝。

public function save()
{
    $this->beforeSave($this->attributes);
}

protected function beforeSave()
{
    //check attributes
}

很顯然資源Data字段,不能很好的完成單資源行為鑒權(quán)的任務(wù)。

設(shè)計(jì)上引入了資源映射字段,每當(dāng)資源變更時(shí),觸發(fā)addMap,會(huì)同步字段信息到資源映射關(guān)系表中(資源的語(yǔ)義化索引)。

舉幾個(gè)栗子,方便大家理解這個(gè)字段:

比如菜單類應(yīng)用,映射字段就是菜單鏈接。

比如數(shù)據(jù)類應(yīng)用,映射字段就是數(shù)據(jù)ID。

public function addMap()
{
    if ($this->map) {
        //sync map field
    } else {
        //create map field
    }
}

應(yīng)用建模,相對(duì)來(lái)說(shuō)是一個(gè)較技術(shù)的話題,換個(gè)方向,下面來(lái)和大家聊一聊系統(tǒng)的業(yè)務(wù)場(chǎng)景。

2. 業(yè)務(wù)場(chǎng)景

系統(tǒng)架構(gòu)上支撐多種業(yè)務(wù)形態(tài)的權(quán)限管控。

2.1 菜單類業(yè)務(wù)

說(shuō)到權(quán)限,大多數(shù)應(yīng)用場(chǎng)景都會(huì)想到菜單權(quán)限,然而我們也不例外,菜單類的應(yīng)用,就是生產(chǎn)的第一個(gè)實(shí)例。

舉個(gè)栗子:A系統(tǒng)/菜單權(quán)限應(yīng)用

字段

菜單ID、菜單名稱、菜單鏈接、菜單上級(jí)ID

行為

訪問(wèn)、授權(quán)

2.2 數(shù)據(jù)類業(yè)務(wù)

數(shù)據(jù)類應(yīng)用,相對(duì)于菜單類型來(lái)說(shuō),更關(guān)注的是,對(duì)某一行數(shù)據(jù)的行為控制,行為是多樣的。

舉個(gè)栗子:A數(shù)據(jù)/數(shù)據(jù)權(quán)限應(yīng)用

字段

數(shù)據(jù)ID、數(shù)據(jù)名稱

行為

訪問(wèn)、授權(quán)、編輯、刪除、新增、重置、導(dǎo)出、導(dǎo)入

2.3 表單類業(yè)務(wù)

表單類應(yīng)用,在2B的系統(tǒng)中,權(quán)限設(shè)計(jì)尤為重要。

舉個(gè)栗子:A確認(rèn)單/表單權(quán)限應(yīng)用

字段

模塊ID、模塊名稱(行程模塊、供應(yīng)商模塊、訂單模塊、財(cái)務(wù)模塊)

行為

訪問(wèn)、授權(quán)、只讀、可寫、隱藏

總結(jié)一下權(quán)限的業(yè)務(wù)場(chǎng)景:

菜單類:?jiǎn)钨Y源的單行為(能否”行為“當(dāng)前“資源”)

數(shù)據(jù)類:?jiǎn)钨Y源的多行為

表單類:多資源的多行為

小伙伴們,你們的業(yè)務(wù)場(chǎng)景能實(shí)現(xiàn)嗎?(留言吧)

3 權(quán)限管理

接下來(lái)說(shuō)說(shuō)權(quán)限管理中的一些設(shè)計(jì)之道。

3.1 自治

設(shè)計(jì)上參考JIRA,當(dāng)前應(yīng)用的管理者主導(dǎo)當(dāng)前應(yīng)用的權(quán)限生態(tài)。

資源的增刪改查

角色的增刪改查

資源字段定義

資源行為定義

資源行為的角色賦予

3.2 自舉

系統(tǒng)中給每一種資源都天生賦予一種系統(tǒng)行為叫做“授權(quán)”。

任意資源節(jié)點(diǎn)的角色行為賦予,都由擁有該資源節(jié)點(diǎn)授權(quán)行為的角色去分配。

3.3 雙向授權(quán)

兩個(gè)維度授權(quán),方便檢索,也方便配置。

基于角色+行為,選擇資源。

基于資源+行為,選擇角色。

^^^^^^^^

下一個(gè)階段將會(huì)支持默認(rèn)權(quán)限的配置,非應(yīng)用內(nèi)的角色,也同樣可以享有應(yīng)用內(nèi)的部分資源的部分行為的權(quán)限。

4 鑒權(quán)設(shè)計(jì)

最后簡(jiǎn)單說(shuō)下,鑒權(quán)接口的設(shè)計(jì)。

U、R、P、S分別表示用戶集合、角色集合、許可權(quán)集合和會(huì)話集合。

PA P×R表示許可權(quán)與角色之間多對(duì)多的指派關(guān)系。

UA U×R表示用戶與角色之間多對(duì)多的指派關(guān)系。

公式一枚:S=UA ∩ PA

4.1 單應(yīng)用+單行為

統(tǒng)稱為資源樹(shù)接口。

舉個(gè)栗子:R角色在A應(yīng)用中擁有P行為的資源。

4.2 單應(yīng)用+單資源+單行為

統(tǒng)稱為行為鑒權(quán)接口。

舉個(gè)栗子:R角色在A應(yīng)用中是否擁有R資源的P行為。

結(jié)束語(yǔ)

權(quán)限系統(tǒng)一直以來(lái)是我們應(yīng)用系統(tǒng)不可缺少的一個(gè)部分,若每個(gè)應(yīng)用系統(tǒng)都重新對(duì)系統(tǒng)的權(quán)限進(jìn)行設(shè)計(jì),以滿足不同系統(tǒng)用戶的需求,將會(huì)浪費(fèi)我們不少寶貴時(shí)間,所以花時(shí)間來(lái)設(shè)計(jì)一個(gè)相對(duì)通用的權(quán)限系統(tǒng)是很有意義的。

設(shè)計(jì)一個(gè)相對(duì)通用的系統(tǒng)是很有意義的。(不僅僅是權(quán)限)

多交流,多分享,書寫更好的代碼。

享受編程和技術(shù)所帶來(lái)的快樂(lè)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/11748.html

相關(guān)文章

  • 途牛原創(chuàng)途牛無(wú)線權(quán)限系統(tǒng)架構(gòu)設(shè)計(jì)實(shí)踐

    摘要:認(rèn)為權(quán)限授權(quán)實(shí)際上是的問(wèn)題。具體的權(quán)限,正向授權(quán)與負(fù)向授權(quán)。應(yīng)用建模業(yè)務(wù)場(chǎng)景權(quán)限管理鑒權(quán)設(shè)計(jì)應(yīng)用建模系統(tǒng)架構(gòu)上支撐權(quán)限系統(tǒng)靈活配置,不僵硬字段,不僵硬行為,基于各種業(yè)務(wù)權(quán)限管控的特征靈活設(shè)計(jì)。表示許可權(quán)與角色之間多對(duì)多的指派關(guān)系。 序 之前寫過(guò)一篇大話權(quán)限中心的PHP架構(gòu)之道,主要是從軟件工程角度介紹,如何通過(guò)編碼規(guī)范、依賴管理、數(shù)據(jù)源架構(gòu)、事務(wù)處理、單元測(cè)試等技術(shù),來(lái)保障權(quán)限系統(tǒng)的高...

    TwIStOy 評(píng)論0 收藏0
  • 途牛原創(chuàng)無(wú)線中心運(yùn)營(yíng)研發(fā)Redis酷實(shí)踐

    摘要:從年月開(kāi)始,的開(kāi)發(fā)由作者目前就職贊助。武器一覽無(wú)線運(yùn)營(yíng)播種機(jī)模型動(dòng)態(tài)表單屬性中心標(biāo)簽系統(tǒng)權(quán)限中心模型位置管理一切皆位置回到主題,下面就為大家詳細(xì)介紹下,我們?nèi)绾瓮嫠?。?chǎng)景包括頁(yè)面緩存限速器頁(yè)面性能分析狀態(tài)統(tǒng)計(jì)智能提醒異常線路。 Redis-簡(jiǎn)介 Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。從2...

    zoomdong 評(píng)論0 收藏0
  • 途牛原創(chuàng)|大話權(quán)限中心PHP架構(gòu)之道

    摘要:權(quán)限中心的依賴聲明聲明依賴關(guān)系檢查代碼規(guī)范聲明開(kāi)發(fā)依賴命名空間檢查代碼規(guī)范,執(zhí)行單元測(cè)試。單元測(cè)試持續(xù)交付一切都如此的完美,沒(méi)有測(cè)試,又如何可以證明這件事情的完美,又如何可以保障交付的質(zhì)量。 序 權(quán)限管理是無(wú)線運(yùn)營(yíng)系統(tǒng)中的核心模塊,通過(guò)訪問(wèn)控制策略的配置,來(lái)約定人與資源的訪問(wèn)關(guān)系。 本文著重講解如何通過(guò)PHP來(lái)構(gòu)建一個(gè)靈活、通用、安全的權(quán)限管理系統(tǒng)。 關(guān)于權(quán)限 首先我們來(lái)聊聊權(quán)限。 權(quán)...

    miracledan 評(píng)論0 收藏0
  • 途牛原創(chuàng)|運(yùn)營(yíng)神器之高效CMS

    摘要:平均每月孵化個(gè)頁(yè)面的全視角覆蓋范圍業(yè)務(wù)支持周年慶,旅游節(jié),營(yíng)銷,專題,主題游,頻道頁(yè)涉及品類跟團(tuán),自助自駕門票當(dāng)?shù)鼐频旰炞C機(jī)票金融通信攻略玩法超級(jí)自由行下面請(qǐng)跟隨大喇叭,一睹運(yùn)營(yíng)播種機(jī)的前世今生。發(fā)布,支持超級(jí)自由行模塊配置。 序 人生短短幾個(gè)秋,不醉不罷休。 CMS即將迎來(lái)2周歲生日,服務(wù)期間生產(chǎn)了*2200+*個(gè)內(nèi)容頁(yè)面。(平均每月孵化100個(gè)頁(yè)面) CMS的全視角: 覆蓋范圍(...

    txgcwm 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<