亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Web的權(quán)限管理方案設(shè)計(jì)

        2021-10-30 02:35:52賈薇
        科學(xué)與生活 2021年19期
        關(guān)鍵詞:粗粒度細(xì)粒度字典

        賈薇

        摘要:在Ruby on Rails 5框架下,設(shè)計(jì)一個(gè)基于Web的權(quán)限管理方案,滿足粗粒度與細(xì)粒度結(jié)合的高自由度控制的要求。

        關(guān)鍵詞:Web;權(quán)限控制;粗粒度;細(xì)粒度;Ruby on Rails 5

        一個(gè)大型的信息系統(tǒng)均會(huì)具有許多功能和許多用戶,這些用戶處于不同的崗位、具有不同的級別,他們從信息系統(tǒng)中獲取信息與處理信息的職權(quán)亦不同,這就要求應(yīng)用系統(tǒng)提供一種權(quán)限管理機(jī)制,控制各種用戶使用系統(tǒng)的權(quán)力訪問。[1]一個(gè)穩(wěn)定可靠的權(quán)限管理方案,應(yīng)該具備粗粒度與細(xì)粒度結(jié)合、高自由度、高擴(kuò)展性等特點(diǎn)。

        設(shè)計(jì)一個(gè)基于Web的信息系統(tǒng)權(quán)限管理方案,并在Linux系統(tǒng)中,使用Ruby on Rails 5框架實(shí)現(xiàn),使其具有上述功能特定。

        1 系統(tǒng)環(huán)境

        測試環(huán)境為Ubuntu16.04操作系統(tǒng),Ruby on Rails 5.2.3(以下簡稱RoR),mysql 5.7數(shù)據(jù)庫。

        2 粗粒度權(quán)限管理

        在RoR構(gòu)架下,采用控制器(controller)加動(dòng)作(action)的方式進(jìn)行邏輯控制??刂破魍ǔS脕黻P(guān)聯(lián)一個(gè)特定的對象實(shí)例,如人員、車輛等;動(dòng)作通常表示對對象實(shí)例的一個(gè)操作,如新建、編輯、刪除等;每一個(gè)訪問比如對應(yīng)一個(gè)控制器和一個(gè)動(dòng)作。這個(gè)特性非常容易用來對進(jìn)行權(quán)限的粗粒度管理。

        2.1 注冊控制器/動(dòng)作

        首先將系統(tǒng)的頂層菜單作為對象,可以新建、存儲(chǔ)及修改刪除。菜單對象沒有業(yè)務(wù)邏輯,僅用于對控制器進(jìn)行歸納展示。

        將控制器和動(dòng)作也看做對象進(jìn)行處理。一個(gè)控制器的源文件在上傳到服務(wù)器之后,并不會(huì)自動(dòng)出現(xiàn)在菜單中,而是需要先注冊。一個(gè)控制器對象實(shí)例必然屬于一個(gè)菜單對象實(shí)例,且包含若干個(gè)動(dòng)作對象實(shí)例。

        當(dāng)一個(gè)控制器對象注冊時(shí),需要填入中文名稱和英文名稱。中文名稱用于菜單展示,英文名稱用于讀取源文件和訪問控制。如新建一個(gè)控制器對象,中文名為“組織機(jī)構(gòu)”,英文名為“dept”,屬于菜單“用戶管理”。系統(tǒng)首先會(huì)去讀取文件名為dept_controller.rb的源文件,然后對其進(jìn)行文本分析查找出所有方法名,并自動(dòng)將方法注冊為動(dòng)作;注冊過程可以自動(dòng)完成,也可以進(jìn)行人工干預(yù)定義更多的屬性,如中文名、對應(yīng)的快捷方式、允許訪問的最低權(quán)限等級(level,后續(xù)詳細(xì)說明)等。

        2.2 設(shè)置角色

        角色管理界面中,可以看到當(dāng)前已經(jīng)注冊的所有菜單、控制器、動(dòng)作,且按照結(jié)構(gòu)排列成樹形選項(xiàng)。

        被選中的項(xiàng)目按照一定的結(jié)構(gòu)生成JSON格式字符串,并作為角色對象實(shí)例的authority屬性值進(jìn)行持久化存儲(chǔ)。

        需要注意的是,如果系統(tǒng)存在根管理員角色,應(yīng)將其的authority屬性特別標(biāo)識;使其自動(dòng)獲得所有路徑的訪問權(quán)限,以減少不必要的前端操作。

        2.3 生成權(quán)限字典

        每一個(gè)角色應(yīng)該有一個(gè)權(quán)限字典。權(quán)限字典按照該角色的authority屬性以一定結(jié)構(gòu)生成一個(gè)Hash對象。其中包含了該角色可見的菜單項(xiàng)、可訪問的路徑、路徑的相關(guān)屬性等。為提高系統(tǒng)運(yùn)行效率,權(quán)限字典在系統(tǒng)運(yùn)行期間應(yīng)常駐內(nèi)存;可采用Redis等NoSQL方式進(jìn)行存儲(chǔ)。

        當(dāng)系統(tǒng)啟動(dòng)時(shí),生成所有角色的權(quán)限字典;當(dāng)對角色authority屬性進(jìn)行修改后,應(yīng)更新常駐內(nèi)存的權(quán)限字典。

        2.4 訪問控制

        粗粒度權(quán)限管理的訪問控制,應(yīng)配置在每一個(gè)控制器的before_action方法中,在登錄驗(yàn)證之后進(jìn)行。根據(jù)當(dāng)前用戶的角色和當(dāng)前控制器/動(dòng)作,在相應(yīng)權(quán)限字典中查找:如果當(dāng)前角色的權(quán)限字典中有當(dāng)前控制器/動(dòng)作,且當(dāng)前用戶的level等級不低于允許訪問該動(dòng)作的level等級,則允許訪問;否則執(zhí)行頁面重定向。

        2.5 權(quán)限字典擴(kuò)展

        上述權(quán)限字典也可關(guān)聯(lián)至單個(gè)用戶。用戶可繼承角色的權(quán)限字典,也可單獨(dú)維護(hù)一個(gè)權(quán)限字典;用戶權(quán)限字典優(yōu)先級應(yīng)高于角色權(quán)限字典。

        3 細(xì)粒度權(quán)限管理

        細(xì)粒度的權(quán)限管理需要考慮到對象實(shí)例的某些特性。比如在樹狀結(jié)構(gòu)的組織機(jī)構(gòu)中,不同分支之間的權(quán)限需要隔離,上級機(jī)構(gòu)對下級機(jī)構(gòu)具有權(quán)限等。細(xì)粒度權(quán)限管理和業(yè)務(wù)邏輯密切關(guān)聯(lián),需要針對性的設(shè)計(jì)。采用權(quán)限等級level與DNA鏈兩種方式可以解決大部分業(yè)務(wù)流程對細(xì)粒度權(quán)限管理的要求。

        3.1 權(quán)限等級level

        所有的對象模型均配置有屬性level,數(shù)據(jù)類型為整形,如有必要還應(yīng)分為讀權(quán)限等級r_level和寫權(quán)限等級w_level。角色實(shí)例必須設(shè)置level,用戶實(shí)例繼承角色實(shí)例的level值,也可單獨(dú)設(shè)置。

        當(dāng)前用戶的level值保存在session中,記為session[:level]。

        3.1.1 設(shè)置實(shí)例權(quán)限等級

        對象實(shí)例的權(quán)限等級在創(chuàng)建的時(shí)候設(shè)置,不得大于創(chuàng)建用戶的權(quán)限等級。如當(dāng)前用戶的權(quán)限等級為5,創(chuàng)建的對象實(shí)例權(quán)限等級最大為5。對于已知的對象,可在創(chuàng)建時(shí)設(shè)置權(quán)限等級默認(rèn)值:如寫權(quán)限w_level等于當(dāng)前用戶session[:level];讀權(quán)限r(nóng)_level設(shè)為0,即所有用戶均可讀取。應(yīng)控制r_level不得大于w_level。

        3.1.2 讀權(quán)限

        根據(jù)當(dāng)前用戶session[:level]控制實(shí)例讀權(quán)限,可將session[:level]前置到SQL請求中,使用where(‘r_level <= ?’,session[:level])語句進(jìn)行限制。也可在獲取到對象實(shí)例之后,將對象實(shí)例的r_level與session[:level]進(jìn)行比較,如r_level>session[:level] == true 則返回錯(cuò)誤。

        3.1.3 寫權(quán)限

        根據(jù)當(dāng)前用戶session[:level]控制實(shí)例寫權(quán)限,應(yīng)在持久化對象之前,將對象實(shí)例的w_level與session[:level]進(jìn)行比較,如w_level>session[:level] == true 則返回錯(cuò)誤;否則允許執(zhí)行update或delete操作。

        3.2 DNA鏈

        DNA鏈在處理樹狀結(jié)構(gòu)的權(quán)限控制時(shí)具有特別的優(yōu)勢。比如在基于組織構(gòu)架的權(quán)限控制中,DNA鏈可以很方便的解決跨部門隔離、上下級權(quán)限等問題。

        3.2.1 構(gòu)建DNA鏈

        需要注意的是,一個(gè)對象根據(jù)業(yè)務(wù)邏輯,可能會(huì)有多條不同的DNA鏈,以對應(yīng)不同的業(yè)務(wù)屬性。比如機(jī)構(gòu)內(nèi)部一份文檔,按所屬部門分類有一條DNA鏈記為dept_dna,按文檔主題分類有一條DNA鏈記為category_dna。以標(biāo)識部門屬性的DNA鏈dept_dna為例進(jìn)行說明。

        對象實(shí)例A,屬于部門B,部門B是部門C的子部門。部門C的dna為’1-3’,部門B的id為8,則部門B的dna為’1-3-8’;對象實(shí)例A繼承部門B的dna,則實(shí)例A的dept_dna為’1-3-8’。以上流程為后臺(tái)自動(dòng)生成,前端不可見。

        3.2.2 用戶權(quán)限

        如果業(yè)務(wù)邏輯要求按照部門細(xì)分權(quán)限,則應(yīng)對每個(gè)用戶設(shè)定其所在部門dept_id和權(quán)限所在部門handle_dept_id;默認(rèn)情況下,兩個(gè)屬性的值一致,也可人為修改;如用戶X屬于部門B,但其具有上級部門C的權(quán)限,則其dept_id為8,handle_dept_id為3。用戶登陸時(shí)將handle_dept_id值保存在session中,記為session[:handle_dept_id]。

        3.2.3 訪問控制

        用戶在對實(shí)例進(jìn)行訪問時(shí),可將session[:handle_dept_id] 前置到SQL請求中,使用where(‘INSTR(concat('-',dept_dna,'-'),?) > 0’,‘%-’ + session[:handle_dept_id].to_s + ‘-%’)語句進(jìn)行限制。也可在持久化對象之前,將對象實(shí)例的dept_dna與session[:handle_dept_id]進(jìn)行比較,如session[:handle_dept_id]存在于dept_dna鏈條中則允許執(zhí)行update或delete操作。

        4 職能崗位

        現(xiàn)代機(jī)構(gòu)組織中,傳統(tǒng)的科層職能式組織結(jié)構(gòu)因其固有缺點(diǎn),負(fù)面效應(yīng)越來越明顯;適宜分工和綜合性復(fù)合型的多功能工作部門(崗位)將成為未來生產(chǎn)組織和管理組織發(fā)展的一個(gè)基本方向[2]。一人多崗、一崗多人、職位(角色)崗位分離的現(xiàn)象越來越普遍。這也對信息系統(tǒng)的權(quán)限控制提出了新的要求。

        需要注意的是,以下通過職能崗位進(jìn)行權(quán)限控制默認(rèn)為允許,即不設(shè)置時(shí)不進(jìn)行職能崗位控制。

        4.1 定義崗位及賦權(quán)

        崗位可通過中文名稱進(jìn)行定義,應(yīng)保證其唯一性和可讀性;中文名稱無法確保唯一性時(shí),應(yīng)編制崗位代碼作為唯一性標(biāo)識。名稱、崗位代碼主要用于在源文件中設(shè)置崗位準(zhǔn)入權(quán)限時(shí)使用。

        每個(gè)用戶可能對應(yīng)多個(gè)崗位,也可能沒有具體崗位,可按一定結(jié)構(gòu)將當(dāng)前用戶對應(yīng)的崗位id組織為JSON格式字符串進(jìn)行持久化存儲(chǔ),并在登錄時(shí)保存在session中,記為session[:duty_ids]。

        4.2 粗粒度控制

        通過職能崗位進(jìn)行粗粒度控制有兩種方式,一種是直接在源文件中固化,通過職能崗位的名稱或崗位代碼進(jìn)行準(zhǔn)入控制;一種是在控制器/動(dòng)作注冊時(shí),將允許訪問的職能崗位定義到動(dòng)作中。具體實(shí)現(xiàn)方法不再贅述。

        4.3 細(xì)粒度控制

        通過職能崗位進(jìn)行細(xì)粒度控制類似于通過權(quán)限等級進(jìn)行控制:創(chuàng)建對象實(shí)例時(shí)由當(dāng)前用戶人工定義職能崗位的讀寫權(quán)限;訪問/操作對象實(shí)例時(shí)將實(shí)例的職能崗位配置與session[:duty_ids]進(jìn)行比較,確定權(quán)限。具體實(shí)現(xiàn)方法不再贅述。

        需要注意,職能崗位是不定項(xiàng)選擇,可以不選,也可以多選;在設(shè)計(jì)屬性結(jié)構(gòu)和檢查算法時(shí)需要考慮這一點(diǎn)。

        5 結(jié)論

        該方案能夠?qū)崿F(xiàn)粗粒度和細(xì)粒度相結(jié)合的權(quán)限控制,具有高自由度、高擴(kuò)展性等特點(diǎn);且能適應(yīng)未來一定時(shí)間內(nèi)組織機(jī)構(gòu)變革的發(fā)展需求;可以滿足大多數(shù)業(yè)務(wù)信息系統(tǒng)權(quán)限控制的要求。

        參考文獻(xiàn):

        [1] 張曉輝,王培康. 大型信息系統(tǒng)用戶權(quán)限管理[J].計(jì)算機(jī)應(yīng)用,2000年11月,第20卷第11期:35頁

        [2] 李海洋,楊麗娜. 科層職能式企業(yè)組織結(jié)構(gòu)研究[J].合作經(jīng)濟(jì)與科技,2012年10月號上,總第450期:50頁

        猜你喜歡
        粗粒度細(xì)粒度字典
        開心字典
        家教世界(2023年28期)2023-11-14 10:13:50
        開心字典
        家教世界(2023年25期)2023-10-09 02:11:56
        一種端到端的加密流量多分類粗粒度融合算法*
        高分辨率遙感船舶圖像細(xì)粒度檢測方法
        細(xì)粒度的流計(jì)算執(zhí)行效率優(yōu)化方法
        基于卷積神經(jīng)網(wǎng)絡(luò)的粗粒度數(shù)據(jù)分布式算法
        在線評論情感分析研究綜述
        基于雙線性卷積網(wǎng)絡(luò)的細(xì)粒度圖像定位
        支持細(xì)粒度權(quán)限控制且可搜索的PHR云服務(wù)系統(tǒng)
        基于公共池自適應(yīng)遷移策略的并行遺傳算法
        久草视频在线这里只有精品| 夜夜未满十八勿进的爽爽影院| 两个黑人大战嫩白金发美女| 国产亚洲美女精品久久久2020| 亚洲国产一区一区毛片a| 亚洲午夜av久久久精品影院色戒| 99久久er这里只有精品18| 日本在线观看不卡| 国产午夜激情视频在线看| 亚洲国产精品无码aaa片| av香港经典三级级 在线| 国产视频网站一区二区三区| 国产精品后入内射日本在线观看 | 国产精品国产午夜免费看福利| 中文字幕亚洲精品专区| 欧美大片aaaaa免费观看| 无遮无挡三级动态图| 国产在线观看精品一区二区三区| 久草视频这里只有精品| 又爽又黄又无遮挡的视频| 中文字幕在线码一区| 久久婷婷夜色精品国产| 久久亚洲精品中文字幕| 久青草久青草视频在线观看| 久久中文字幕日韩无码视频| 久久精品这里只有精品| 成人一区二区三区蜜桃| 2021国产精品视频网站| 精品亚洲成a人在线观看青青| 被欺辱的高贵人妻被中出| 丝袜美腿在线观看视频| 少妇伦子伦精品无吗| 国产精品白浆一区二小说| 亚洲国产精品一区二区第一| 日韩不卡的av二三四区| 国产精品综合一区二区三区| 久热香蕉av在线爽青青| 日本女优久久精品久久| 国产69精品久久久久777| 国产乱淫视频| 麻豆成年人视频在线观看|