2013-03-13 57 views
1

我通常傾向於具體的技術問題,但這是一個相當開放的問題,但仍在Q & A範圍內而非討論。如何使用Javascript/PHP/MySQL定義和使用網站級別的「用戶權限級別」變量

它認爲用戶級別權限的最佳實現可以規範Web應用程序中可以做什麼和不可以做什麼。

我將從一個例子開始。我想從數據庫中刪除一部分。我以Jon Doe身份登錄。 Jon Doe具有訪問權限級別1(sql數據庫中的列),因此無法刪除部分。我會使用JavaScript(jQuery)來觸發ajax PHP函數來執行刪除操作。

所以,我想出了幾個選擇,但我相信有更好的東西。

  1. 我可以設置一個PHP「用戶級」會議在登錄變量,評估阿賈克斯PHP刪除請求,並返回成功的功能,讓用戶知道,訪問被拒絕。

    優點:快速訪問,簡單

    缺點:我要運行有關評估成功

    的PHP請求和混亂
  2. 我可以運行PHP預定義的功能,查詢MySQL的阿賈克斯內的用戶權限PHP刪除請求並返回成功功能,並讓用戶知道訪問被拒絕。

    優點:評估實時(不一定是關鍵,但將允許權限才能更改,而用戶仍然登錄)

    缺點:我要運行有關評估successs

  3. 的PHP請求和混亂我可以在運行Ajax PHP刪除請求之前查詢的Ajax Javascript/PHP登錄過程中創建全局的「用戶級」javascript變量(附加到窗口?)。

    優點:停止不必要的Ajax請求,非常整齊,容易

    缺點:看起來它可能會受到

我期待在整個應用程序評估用戶權限相當數量的,所以我感謝專家們爲解決我認爲是一個相當普遍的問題所做的任何建議。我可能錯過了一些明顯的東西。

謝謝。

** IN RESPONSE **

啊,這很有趣。是的,只有一個加載模板界面,每個內容面板都通過ajax加載。我並沒有真正考慮過將界面按鈕禁用或移除爲「先發制人」。我喜歡首先做一個javascript檢查的想法,同時用PHP側的檢查進行備份。這將避免我必須執行不必要的Ajax調用,如果用戶已經達不到所需的訪問級別。

回答

1

爲了安全性和可用性,請從PHP端處理此事,利用會話來存儲用戶的ID。當且僅當用戶具有刪除權限時,PHP才提供刪除鏈接。收到刪除請求後,請再次檢查以確認用戶具有刪除權限。這確保瞭如果用戶在收到刪除鏈接後失去特權,他/她將不能刪除。如果您在應用程序中大量使用AJAX,並且該接口僅加載一次,那麼當用戶的權限已增大時,如果收到任何請求,就應該向瀏覽器發送某種狀態變量。此狀態變量應該觸發UI重新加載,以便現在啓用適當的鏈接/按鈕/功能。這不是最簡單的解決方案,但它是最強大的,並允許聽起來就像你正在尋找的一切。

+0

d/v,因爲你已經說過你'平時'做它的服務器端。你必須*總是*做到服務器端。你不能相信客戶。 – mattmanser 2013-03-13 10:04:11

+0

這實際上取決於他在內部工作的限制。如果他將訪問級別存儲在客戶端,但在對服務器執行任何敏感操作之前進行檢查,他可能會稍微懶散一些。它也取決於信任級別。就我個人而言,我喜歡進行超出理智水平的安全檢查。爲了避免批評,刪除了「通常」。 :-P – thatthatisis 2013-03-13 10:07:38

+0

@thathatisis - 謝謝。我已經添加了對該問題的回覆。你能否詳細說明你的意思是「發送給瀏覽器的狀態變量......」。我想我可能想按照你的建議去做,並先用javascript檢查,然後再用PHP檢查。你將如何去存儲和訪問這個客戶端?我對全局變量有一些想法,但我對PHP有更多的經驗。也許我可以將它放在UI靜態區域的隱藏字段中? – 2013-03-13 14:41:33