鍍金池/ 問答/PHP/ 各位親,請教一個接口設(shè)計的權(quán)限驗證問題

各位親,請教一個接口設(shè)計的權(quán)限驗證問題

我們PHP團隊目前主要工作是為手機APP開發(fā)接口,目前已經(jīng)實現(xiàn)了一個 JSON RPC 風(fēng)格的接口框架,簡單講,前端以這種 URL 形式直接調(diào)用后臺接口:
www.xxx.com/api.php?c=books&a=update
所謂接口,就是指某個控制器的一個方法,所以這將會執(zhí)行 books 控制器里的 update 方法(更新一本書),返回 JSON 表示成功或失敗。

不同的接口需要不同的權(quán)限驗證。例如上面的 books/update 驗證規(guī)則是,只有管理員和這本書的擁有者才可執(zhí)行更新操作。目前我們是在 update 方法里編寫代碼實施驗證。

我的問題是,如何設(shè)計接口的權(quán)限驗證,使得團隊里的每個程序員能夠優(yōu)雅地、方便地、高效地為各種接口定義規(guī)則,并能在將來輕松地修改已有規(guī)則、補充新規(guī)則……

謝謝!

回答
編輯回答
獨特范

中間件了解一下。

用中間件包裹需要權(quán)限驗證的接口,就不需要每個方法里面都編寫驗證規(guī)則了。

2018年4月17日 04:58
編輯回答
墨沫

個人做法:
1.專門寫一個類來處理權(quán)限驗證
2.驗證權(quán)限的主要方式為acl,將用戶歸屬于角色,如管理員、作者;將控制器參數(shù)定義為資源,每個controller下的每個action定義為一個資源;通過數(shù)據(jù)庫或配置文件為每個角色配置資源權(quán)限
3.在父類中調(diào)用權(quán)限驗證類進行acl權(quán)限判斷
4.當(dāng)前用戶角色為作者時,需要進行文章歸屬判斷,判斷的具體方法還是應(yīng)該寫在權(quán)限驗證類中,但需要根據(jù)你們的需求決定在父類中統(tǒng)一驗證還是每個controller驗證或每個action單獨驗證,如果要統(tǒng)一驗證,那么文章ID參數(shù)名必須是特殊的,比如叫aid。個人不建議統(tǒng)一判斷文章歸屬,可能會有意料之外的需求出現(xiàn)。

2017年6月28日 05:53
編輯回答
雨萌萌

可以在公共的父類控制器里,統(tǒng)一驗證登錄信息,角色信息,還有要過濾信息。權(quán)限驗證
存表里,還是在子類控制器的變量里看個人

2018年9月11日 11:54
編輯回答
熟稔

我的方法是做一個父類,在父類里面寫__construct來驗證你的權(quán)限,如果權(quán)限不符合就返回一串信息然后exit(0),控制器子類繼承這個類

2017年8月14日 08:09