0
是否可以創建一個由Active Directory組嚴格控制的頁面(View)?ASP.NET MVC 5頁由Active Directory Group控制
沒有登錄這個頁面,如果你是「VIP」Active Directory組的成員,那麼該頁面被渲染,否則如果沒有,那麼你看不到它。
是否可以創建一個由Active Directory組嚴格控制的頁面(View)?ASP.NET MVC 5頁由Active Directory Group控制
沒有登錄這個頁面,如果你是「VIP」Active Directory組的成員,那麼該頁面被渲染,否則如果沒有,那麼你看不到它。
首先讓你的當前用戶的Windows登錄
var windowsUserName= HttpContext.Current.User.Identity.WindowsLogin();
然後,使用的System.DirectoryServices
using System.DirectoryServices;
public List<string> GetUsersActiveDirectoryGroups(string windowsUserName)
{
try
{
var allUserGroups = new List<string>();
if (windowsUserName == null) return allUserGroups;
var domainConnection = new DirectoryEntry();
var samSearcher = new DirectorySearcher
{
SearchRoot = domainConnection,
Filter = "(samAccountName=" + windowsUserName + ")"
};
samSearcher.PropertiesToLoad.Add("displayName");
var samResult = samSearcher.FindOne();
if (samResult == null) return allUserGroups;
var theUser = samResult.GetDirectoryEntry();
theUser.RefreshCache(new[] { "tokenGroups" });
_bet365EmployeeFullName = theUser.Properties["CN"].Value.ToString();
foreach (byte[] resultBytes in theUser.Properties["tokenGroups"])
{
var mySid = new SecurityIdentifier(resultBytes, 0);
var sidSearcher = new DirectorySearcher
{
SearchRoot = domainConnection,
Filter = "(objectSid=" + mySid.Value + ")"
};
sidSearcher.PropertiesToLoad.Add("name");
var sidResult = sidSearcher.FindOne();
if (sidResult != null)
{
allUserGroups.Add((string)sidResult.Properties["name"][0]);
}
}
return allUserGroups;
}
現在,您需要映射哪些羣體有機會獲得所有用戶的AD組該應用程序中的哪個視圖。 完成後,下一步是限制「視圖」的查看。
您需要設置使用MVC AuthorizeAttribute的權限過濾器。像下面的東西。
public class PermissionsFilter : AuthorizeAttribute
{
private readonly string _viewName;
public PermissionsFilter(string viewName)
{
_viewName = viewName;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
//Check to see if users groups has access to the view
//If not redirect to unauthorized page
}
}
我通過在session中擁有一個用戶對象來完成上述任務。這包含我的用戶可以訪問的所有應用程序權限的列表。這是你需要做的映射。我將所有視圖名稱與AD組可以訪問的ID一起存儲在數據庫中。
然後最後在控制器中,相應地爲視圖裝飾獲取動作。
[HttpGet]
[PermissionsFilter("ViewName")]
public ActionResult ReturnMyView(int currentFolderID)
{
return View(); //Etc..
}
好希望幫助!
這是肯定的......但你需要存儲你自己的映射,哪些組可以訪問哪些視圖。 – Wheels73
你有任何代碼示例或指向我在哪裏看? – fes
當然..我會給你一個答案。你已經有訪問AD組的代碼了嗎? – Wheels73