2017-03-02 23 views
0

大家早上好,MVC 4存儲在數據庫中的應用程序,Windows身份驗證和自定義角色

我對我的MVC 4應用程序有以下要求。

  1. 使用Windows憑據進行身份驗證(自動)。
  2. 一旦根據在一組數據庫表中定義的角色對應用內的特定頁面/視圖/控制器進行身份驗證,就會受到限制。

編輯

這裏是我到目前爲止已經試過:

  1. 設置我的MVC應用程序使用Windows身份驗證
  2. 將這個在我的Global.asax文件

    if(HttpContext.Current.User!= null) { string [] roles = {「testmyrole」}; GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity,roles); Thread.CurrentPrincipal = HttpContext.Current.User = principal; bool test = User.IsInRole(「testmyrole」); }

但HttpContext.Current.User總是空...

字符串[]的角色最終會通過調用數據庫來填充......硬代碼只是用於測試的權利現在。

在那裏我可以把上面這段代碼在我的MVC應用程序的任何想法,這樣無論什麼觀點被稱爲該代碼被運行,所以我可以填充該角色,然後在我的其他控制器

使用下面的代碼
[Authorize(Roles ="testmyrole")] 
public ActionResult Index() 
{ 
... do other fun stuff here 
} 

謝謝你的時間。

科裏

+0

你好...只是一些友好的建議。除非你嘗試第一件事,否則你很難得到任何人的「詳細」解決方案。 – Wheels73

回答

0

我想我可能已經找到了解決我的問題。

因此,這裏是我做過什麼:

  1. 修改我的viewStart.CSHTML文件,如下所示:

@using SMTRApp.Business;

@using System.Security.Principal;

@using System。線程;

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    string[] roles = BusinessLayer.BLGetUserRoles(User.Identity.Name).ToArray(); 
    GenericPrincipal principal = new GenericPrincipal(User.Identity, roles); 
    Thread.CurrentPrincipal = System.Web.HttpContext.Current.User = principal; 
} 

然後我能夠把下面的代碼在我的控制器來實現基於SQL角色的安全性的開頭:

[Authorize(Roles = "Accounting, Analyst, ETL")] 

難道還有比這更好的方式來實現基於角色的安全性,無論如何調用視圖?

任何想法將不勝感激。

科裏

相關問題