伊莉討論區

標題: 權限系統的問題 [打印本頁]

作者: ggnnyy    時間: 2017-9-21 10:24 PM     標題: 權限系統的問題

本帖最後由 ggnnyy 於 2017-9-21 10:35 PM 編輯

各位大大好:
我使用MVC5 C#的開發環境...我的問題是因為預設的權限認證如果權限不足時,會自動導向一個頁面(如回到登入頁面),
但我希望是如果權限不足時只需要出現一個alert警告,不要在導向其他頁面了,
所以我自訂了一個FilterAttribute如下
  1. 程式碼在下面回復那邊....這裡編輯程式碼的地方真是考倒我了....
複製代碼
問題如上面程式碼的註解處,如果只按照上面這樣寫,alert之後還是會繼續訪問頁面,但是如果又讓他導向上一頁,那在頁面是部分檢視的頁面時又會出現其他問題,有什麼方法可以讓他alert完就不進行任何動作,也能停止繼續訪問這個頁面嗎?

作者: ggnnyy    時間: 2017-9-21 10:34 PM

本帖最後由 ggnnyy 於 2017-9-21 10:37 PM 編輯
  1. public class TestFilterAttribute : FilterAttribute,IAuthenticationFilter
  2.     {
  3.       
  4.         public void OnAuthentication(AuthenticationContext filterContext)
  5.         {           
  6.             
  7.         }

  8.         public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
  9.         {            
  10.             var user = filterContext.HttpContext.User;
  11.             if ((user == null) || (!user.Identity.IsAuthenticated && !user.IsInRole("Admin")))
  12.             {
  13.                 //filterContext.Result = new HttpUnauthorizedResult();  //原來的會導向自定義的錯誤面頁上

  14.                 filterContext.HttpContext.Response.Write("<script>alert('權限不足喔!!!!!')</script>");  //我想改成只跳出alert 不要跳轉頁面
  15.                
  16.             }
  17.         }
複製代碼

作者: 我愛小笨蛋    時間: 2017-10-6 07:28 PM

我覺得的邏輯怪怪的
一般來說 如果權限不足一定會導向某一個地方
不然它一定會繼續訪問內容

或是你要再同一頁作兩個內容
分成有權限跟沒權限的
這樣的話你在本頁刷新就不會看到不該看的內容

作者: sam30525sam    時間: 2017-10-12 10:00 PM

這個問題很簡單,但是你的邏輯有點奇怪,
1. MVC也是可以做前後端分離的
前端跟後端分離是最符合MVC這個框架的,
也許這樣你聽不懂,以你的程式碼為例子,
請不要在C#內寫html或js碼,
C#是屬於後端的程式,只負責商業邏輯
Html/JS是屬於前端的程式,只負責畫面

2. 正確的處理方式
(1) 使用這進入該頁面(前端)後,首先發出一個http給後端,要求檢查權限
(2) 後端回應權限後,由前端自行判定是否要轉跳或跳警告視窗

這樣子你的程式才會彈性大,未來也好擴充,
如果有問題,可以在發問

作者: ggnnyy    時間: 2017-10-12 11:33 PM

sam30525sam 發表於 2017-10-12 10:00 PM
這個問題很簡單,但是你的邏輯有點奇怪,
1. MVC也是可以做前後端分離的
前端跟後端分離是最符合MVC這個框 ...

感謝SAM大的回覆,我懂SAM大的意思,只是以MVC預設的專案來說,如果遇到權限不足時他會導向你指定的一個頁面,
如果我希望權限不足時就跳一個alert應該是要在頁面端去寫,但是我其實就是想要有一個方法可以不用再每個頁面判斷權限不足時要alert,想要有一個統一共通的作法...
作者: sam30525sam    時間: 2017-10-14 12:13 AM

本帖最後由 sam30525sam 於 2017-10-14 12:21 AM 編輯
ggnnyy 發表於 2017-10-12 11:33 PM
感謝SAM大的回覆,我懂SAM大的意思,只是以MVC預設的專案來說,如果遇到權限不足時他會導向你指定的一個 ...

有,這很容易做,前端的頁面,如果是每一頁都要做「權限判斷」的行為的話,
這個你應該放在基底頁面去處理,
當然,我說的是前端自己做掉,而不是後端,後端只提供「權限判斷接口」。

vue.js/angular.js/angular 4,等的前端技術都可以簡單的做到,
單純html/javascript/jquery也可以,
大致的要點都一樣,
你有一個外框頁面當基底頁面,
當你換頁面的時候,其實外框頁面沒有重新拉資料,你只是換掉裡面頁面的內容。

而你的權限判斷,就寫在基底頁面就好。

====

我上面說的做法,MVC也可以用,
前端的做法,應該是加在_Layout.cshtml那頁,
後端的作法,就是你接口都要做判斷,這樣就代表你要自己寫一個自定義的BaseController,
然後你的所有接口都要繼承該BaseController

但我個人比較傾向,後端開一個「權限判斷」的接口,讓前端去呼叫,前端自己在layout那邊玩


作者: ggnnyy    時間: 2017-10-14 02:37 AM

感恩SAM大 讚嘆SAM大~  我有想法了!!
謝謝你每次都很用心回答問題!!!




歡迎光臨 伊莉討論區 (http://www17.eyny.com/) Powered by Discuz!