大家早上好,
我对MVC 4应用程序有以下要求。
修改
这是我到目前为止所尝试的内容:
将其放入我的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始终为null ...
最终将通过调用数据库来填充字符串[]角色......硬编码目前仅用于测试。
我可以将上述代码放在我的MVC应用程序中的任何想法,以便无论调用哪个View,此代码都会运行,因此我可以填充角色,然后在我的其他控制器中使用以下代码
[Authorize(Roles ="testmyrole")]
public ActionResult Index()
{
... do other fun stuff here
}
感谢您的时间。
科里
答案 0 :(得分:0)
我想我可能找到了解决问题的方法。
所以这就是我所做的:
@using SMTRApp.Business;
@using System.Security.Principal;
@using System.Threading;
@{
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")]
无论如何调用视图,是否有更好的方法来实现基于角色的安全性?
任何想法都会非常感激。
科里