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

資訊專欄INFORMATION COLUMN

基于RESTful API 怎么設(shè)計(jì)用戶權(quán)限控制?

sumory / 2921人閱讀

摘要:原文鏈接基于怎么設(shè)計(jì)用戶權(quán)限控制前言有人說,每個(gè)人都是平等的也有人說,人生來就是不平等的在人類社會(huì)中,并沒有絕對(duì)的公平,一件事,并不是所有人都能去做一樣物,并不是所有人都能夠擁有。

原文鏈接:BlueSun | 基于RESTful API 怎么設(shè)計(jì)用戶權(quán)限控制?

前言

有人說,每個(gè)人都是平等的;
也有人說,人生來就是不平等的;
在人類社會(huì)中,并沒有絕對(duì)的公平,
一件事,并不是所有人都能去做;
一樣物,并不是所有人都能夠擁有。
每個(gè)人都有自己的角色,每種角色都有對(duì)某種資源的一定權(quán)利,或許是擁有,或許只能是遠(yuǎn)觀而不可褻玩。
把這種人類社會(huì)中如此抽象的事實(shí),提取出來,然后寫成程序,還原本質(zhì)的工作,就是我們程序員該做的事了。
有了一個(gè)這么有范兒的開頭,下面便來談?wù)劵赗ESTful,如何實(shí)現(xiàn)不同的人不同的角色對(duì)于不同的資源不同的操作的權(quán)限控制。

RESTful簡述

本文是基于RESTful描述的,需要你對(duì)這個(gè)有初步的了解。
RESTful是什么?
Representational State Transfer,簡稱REST,是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構(gòu)風(fēng)格。
REST比較重要的點(diǎn)是資源狀態(tài)轉(zhuǎn)換
所謂"資源",就是網(wǎng)絡(luò)上的一個(gè)實(shí)體,或者說是網(wǎng)絡(luò)上的一個(gè)具體信息。它可以是一段文本、一張圖片、一首歌曲、一種服務(wù),總之就是一個(gè)具體的實(shí)在。
而 "狀態(tài)轉(zhuǎn)換",則是把對(duì)應(yīng)的HTTP協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞分別對(duì)應(yīng)四種基本操作:

GET,用來瀏覽(browse)資源

POST,用來新建(create)資源

PUT,用來更新(update)資源

DELETE,用來刪除(delete)資源

資源的分類及操作

清楚了資源的概念,然后再來對(duì)資源進(jìn)行一下分類,我把資源分為下面三類:

私人資源 (Personal Source)

角色資源 (Roles Source)

公共資源 (Public Source)

"私人資源":是屬于某一個(gè)用戶所有的資源,只有用戶本人才能操作,其他用戶不能操作。例如用戶的個(gè)人信息、訂單、收貨地址等等。
"角色資源":與私人資源不同,角色資源范疇更大,一個(gè)角色可以對(duì)應(yīng)多個(gè)人,也就是一群人。如果給某角色分配了權(quán)限,那么只有身為該角色的用戶才能擁有這些權(quán)限。例如系統(tǒng)資源只能夠管理員操作,一般用戶不能操作。
"公共資源":所有人無論角色都能夠訪問并操作的資源。

而對(duì)資源的操作,無非就是分為四種:

瀏覽 (browse)

新增 (create)

更新 (update)

刪除 (delete)

角色、用戶、權(quán)限之間的關(guān)系

角色和用戶的概念,自不用多說,大家都懂,但是權(quán)限的概念需要提一提。
"權(quán)限",就是資源與操作的一套組合,例如"增加用戶"是一種權(quán)限,"刪除用戶"是一種權(quán)限,所以對(duì)于一種資源所對(duì)應(yīng)的權(quán)限有且只有四種。

角色用戶的關(guān)系:一個(gè)角色對(duì)應(yīng)一群用戶,一個(gè)用戶也可以扮演多個(gè)角色,所以它們是多對(duì)多的關(guān)系。
角色權(quán)限的關(guān)系:一個(gè)角色擁有一堆權(quán)限,一個(gè)權(quán)限卻只能屬于一個(gè)角色,所以它們是一(角色)對(duì)多(權(quán)限)的關(guān)系
權(quán)限用戶的關(guān)系:由于一個(gè)用戶可以扮演多個(gè)角色,一個(gè)角色擁有多個(gè)權(quán)限,所以用戶與權(quán)限是間接的多對(duì)多關(guān)系。

需要注意兩種特別情況:

私人資源與用戶的關(guān)系,一種私人資源對(duì)應(yīng)的四種權(quán)限只能屬于一個(gè)用戶,所以這種情況下,用戶和權(quán)限是一(用戶)對(duì)多(權(quán)限)的關(guān)系。

超級(jí)管理員的角色,這個(gè)角色是神一般的存在,能無視一切阻礙,對(duì)所有資源擁有絕對(duì)權(quán)限,甭管你是私人資源還是角色資源。

數(shù)據(jù)庫表的設(shè)計(jì)

角色、用戶、權(quán)限的模型應(yīng)該怎么樣設(shè)計(jì),才能滿足它們之間的關(guān)系?

對(duì)上圖的一些關(guān)鍵字段進(jìn)行說明:

Source

name: 資源的名稱,也就是其他模型的名稱,例如:user、role等等。

identity: 資源的唯一標(biāo)識(shí),可以像uuid,shortid這些字符串,也可以是model的名稱。

permissions : 一種資源對(duì)應(yīng)有四種權(quán)限,分別對(duì)這種資源的browse、create、update、delete

Permission

source : 該權(quán)限對(duì)應(yīng)的資源,也就是Source的某一條記錄的唯一標(biāo)識(shí)

action :對(duì)應(yīng)資源的操作,只能是browse、create、update、delete四個(gè)之一

relation:用來標(biāo)記該權(quán)限是屬于私人的,還是角色的,用于OwnerPolicy檢測(cè)

roles: 擁有該權(quán)限的角色

Role

users : 角色所對(duì)應(yīng)的用戶群,一個(gè)角色可以對(duì)應(yīng)多個(gè)用戶

permissions: 權(quán)限列表,一個(gè)角色擁有多項(xiàng)權(quán)利

User

createBy : 該記錄的擁有者,在user標(biāo)里,一般等于該記錄的唯一標(biāo)識(shí),這一屬性用于OwnerPolicy的檢測(cè),其他私有資源的模型設(shè)計(jì),也需要加上這一字段來標(biāo)識(shí)資源的擁有者。

roles : 用戶所擁有的角色

策略/過濾器

在sails下稱為策略(Policy),在java SSH下稱為過濾器(Filter),無論名稱如何,他們工作原理是大同小異的,主要是在一條HTTP請(qǐng)求訪問一個(gè)Controller下的action之前進(jìn)行檢測(cè)。所以在這一層,我們可以自定義一些策略/過濾器來實(shí)現(xiàn)權(quán)限控制。
為行文方便,下面姑且允許我使用策略這一詞。

策略 (Policy)

下面排版順序?qū)?yīng)Policy的運(yùn)行順序

SessionAuthPolicy
檢測(cè)用戶是否已經(jīng)登錄,用戶登錄是進(jìn)行下面檢測(cè)的前提。

SourcePolicy
檢測(cè)訪問的資源是否存在,主要檢測(cè)Source表的記錄

PermissionPolicy
檢測(cè)該用戶所屬的角色,是否有對(duì)所訪問資源進(jìn)行對(duì)應(yīng)操作的權(quán)限。

OwnerPolicy
如果所訪問的資源屬于私人資源,則檢測(cè)當(dāng)前用戶是否該資源的擁有者。

如果通過所有policy的檢測(cè),則把請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)action。

Sails下的權(quán)限控制實(shí)現(xiàn)

在Sails下,有一個(gè)很方便的套件sails-permissions,集成了一套權(quán)限管理的方案,本文也是基于該套件的源碼所引出來的權(quán)限管理解決方案。

結(jié)語

對(duì)程序員最大的挑戰(zhàn),并不是能否掌握了哪些編程語言,哪些軟件框架,而是對(duì)業(yè)務(wù)和需求的理解,然后在此基礎(chǔ)上,把要點(diǎn)抽象出來,寫成計(jì)算機(jī)能理解的語言。
最后,希望這篇文章,能夠幫助你對(duì)權(quán)限管理這一課題增加多一點(diǎn)點(diǎn)理解。

寫作參考

理解RESTful架構(gòu)

REST wiki

sails-permissions 源碼

如果本文對(duì)您有用
請(qǐng)不要吝嗇你們的Follow與Start
這會(huì)大大支持我們繼續(xù)創(chuàng)作

「Github」
MZMonster :@MZMonster
JC_Huang :@JerryC8080

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

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

相關(guān)文章

  • 基于RESTful API 怎么設(shè)計(jì)用戶權(quán)限控制?

    摘要:原文鏈接基于怎么設(shè)計(jì)用戶權(quán)限控制前言有人說,每個(gè)人都是平等的也有人說,人生來就是不平等的在人類社會(huì)中,并沒有絕對(duì)的公平,一件事,并不是所有人都能去做一樣物,并不是所有人都能夠擁有。 原文鏈接:BlueSun | 基于RESTful API 怎么設(shè)計(jì)用戶權(quán)限控制? 前言 有人說,每個(gè)人都是平等的;也有人說,人生來就是不平等的;在人類社會(huì)中,并沒有絕對(duì)的公平,一件事,并不是所有人都能去做;...

    X1nFLY 評(píng)論0 收藏0
  • 基于shiro的改造集成真正支持restful請(qǐng)求

    摘要:基于的改造集成真正支持請(qǐng)求這個(gè)模塊分離至項(xiàng)目權(quán)限管理系統(tǒng)與前后端分離實(shí)踐權(quán)限管理系統(tǒng)與前后端分離實(shí)踐,感覺那樣太長了找不到重點(diǎn),分離出來要好點(diǎn)。基于角色的授權(quán)模型中,角色所擁有的資源形式為。最后項(xiàng)目實(shí)現(xiàn)了基于的動(dòng)態(tài)權(quán)限認(rèn)證。 基于shiro的改造集成真正支持restful請(qǐng)求 這個(gè)模塊分離至項(xiàng)目[api權(quán)限管理系統(tǒng)與前后端分離實(shí)踐]api權(quán)限管理系統(tǒng)與前后端分離實(shí)踐,感覺那樣太長了找不...

    nodejh 評(píng)論0 收藏0
  • 7點(diǎn)關(guān)于RESTful規(guī)范的API接口設(shè)計(jì)的想法

    摘要:返回值結(jié)構(gòu)在完成了上面的部署之后,接下來我們來看看返回結(jié)果應(yīng)該怎么樣來確定。因?yàn)榉祷刂抵?,我們常常要?duì)數(shù)據(jù)進(jìn)行區(qū)分分組,或者按照從屬關(guān)系打包,所以,我們?cè)俜祷貢r(shí),最好有包裹的思想,把數(shù)據(jù)存放在不同的包裹中進(jìn)行返回。 在項(xiàng)目中,需要為APP撰寫API。剛開始接觸的時(shí)候,并沒有考慮太多,就想提供URL,APP端通過該URL進(jìn)行查詢、創(chuàng)建、更新等操作即可。但再對(duì)相關(guān)規(guī)范進(jìn)行了解后,才發(fā)現(xiàn),A...

    Jason 評(píng)論0 收藏0
  • PHP / Laravel API 開發(fā)推薦閱讀清單

    showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區(qū)優(yōu)秀文章 Laravel 5.5+passport 放棄 dingo 開發(fā) API 實(shí)戰(zhàn),讓 API 開發(fā)更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項(xiàng)目中使用 - API 文檔撰寫方案 推薦 Laravel API 項(xiàng)目必須使用的 8 個(gè)...

    shmily 評(píng)論0 收藏0
  • 消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)「上篇」

    摘要:原文鏈接消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)上篇由于文章篇幅較長,而作者精力有限,不希望這么早就精盡人亡,故分成上下篇來寫消息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。更新于關(guān)聯(lián)文章消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)下篇如果本文對(duì)您有用請(qǐng)不要吝嗇你們的與這會(huì)大大支持我們繼續(xù)創(chuàng)作 原文鏈接:Bluesun | 消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)「上篇」 由于文章篇幅較長,而作者精力有限,不希望這么早就精盡人亡,故分成上下篇來寫消息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。上篇主要講...

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

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

0條評(píng)論

閱讀需要支付1元查看
<