鍍金池/ 問答/PHP  數(shù)據(jù)庫/ 添加權限的問題?

添加權限的問題?

以前做過權限是寫死的,最近想了解一下可以添加權限的這個功能。
想問一下權限可以添加的問題。

  • 比如說,網(wǎng)站一開始的權限初始化好了,使用過程中,管理員添加了一個 編輯文章的 權限,這時候擁有這個權限才可以編輯文章,但是代碼是一開始就寫好的,開發(fā)者不可能想到管理員添加這個權限,那么這個新添加的權限有什么用呢?
  • 還是我理解錯了,可以動態(tài)添加權限并不是這么一回事?望解疑。 謝謝。
回答
編輯回答
逗婦乳
  1. 將需要/可能需要權限控制的路由存入數(shù)據(jù)庫路由表中(路由需要指定name)
  2. 為用戶/角色分配路由權限
  3. 添加路由權限驗證中間件
    a. 檢查路由是否存在于路由表中
    b. 存在則獲取當前登錄用戶/角色是否有該路由權限(有則$next,無則響應無權限提示)
    c. 不存在直接$next($req)

當需要添加文章編輯權限時:

  1. 插入數(shù)據(jù)到路由表(post.edit)
  2. 為用戶分配路由post.edit

https://github.com/Sydney710/...

2017年9月7日 05:21
編輯回答
不討喜

你理解 錯了。如果一開始代碼里沒判斷 ,那添加權限 沒半毛錢的用。

添加權限 ,判斷權限 要一起才有用。

2018年2月21日 17:28
編輯回答
逗婦惱

權限添加的方式有很多,直接寫在業(yè)務代碼里面的權限判斷是最簡單明了的一種,但是會給開發(fā)造成負擔,維護起來也不方便,就比如遇到題主描述里面的問題,基本只能交給開發(fā)來改。

我比較常用的權限控制,是寫一個中間件,或者控制器的構造函數(shù)里,使用某些固定的格式來直接進行權限管理。舉個例子:
通常我們的控制器的命名是有規(guī)則的,xxxController
權限的格式是:控制器名 + 方法名
比如 文章相關的控制器: ArticleController 里面有個編輯的函數(shù):edit

那么 編輯文章的權限名就是字符串: ‘a(chǎn)rticlecontroller@edit’

某個請求到來的時候,在中間件或者構造函數(shù)中,判斷這個用戶是否有相應的權限。如果沒有,則中斷函數(shù),進行異常處理。如果有,則繼續(xù)執(zhí)行代碼。

2017年6月5日 14:26