我实际上是用NHibernate开发一个带有ASP.Net MVC的网站 我需要管理组,页面和其他东西的权限 我希望我的角色,权限,操作,组,以及在我的数据库中的所有事情。ASP.Net的安全工具包MVC
而且像旧的post我想知道Ayende Rhino Security toolkit是否仍然相关,或者是否还有其他相关的通用工具包?对于我的新项目,我已经使用了标识系统
的ASP.NET识别系统
我实际上是用NHibernate开发一个带有ASP.Net MVC的网站 我需要管理组,页面和其他东西的权限 我希望我的角色,权限,操作,组,以及在我的数据库中的所有事情。ASP.Net的安全工具包MVC
而且像旧的post我想知道Ayende Rhino Security toolkit是否仍然相关,或者是否还有其他相关的通用工具包?对于我的新项目,我已经使用了标识系统
的ASP.NET识别系统
旨在取代以前的ASP.NET成员资格和简单的会员系统。它包括配置文件支持,OAuth的集成,与OWIN工作,并随随Visual Studio的2013年
特别是ASP.NET模板本教程帮助了我很多第一次
http://benfoster.io/blog/aspnet-identity-stripped-bare-mvc-part-1
你也可以考虑MembershipReboot。据我所知,它仍然超越了Asp.Net Identity,尽管它最初是为克服会员缺点而完成的。
关于犀牛安全工具包,我不知道它是在哪个状态。
这里是什么,我做了一个例子
第1步 - 创建用户
var identity = new ClaimsIdentity(
new[] {
new Claim(ClaimTypes.Name, usr.Name),
new Claim(ClaimTypes.Email, usr.Email),
new Claim(ClaimTypes.Role, usr.Roles.FirstOrDefault().Role),
new Claim("StuffXId", usr.StuffXId + ""),
new Claim("StuffYId", usr.StuffYId + "")
}
, "BMMC"//"ApplicationCookie"
);
foreach(AccessLevels x in usr.AccessLevels)
identity.AddClaim(new Claim("AccessLevel", x.Access));
步骤2中的权利 - 我创造了我的课BMClaimsAuthorize
public class BMClaimsAuthorize : AuthorizeAttribute
{
public string ClaimType { get; set; }
public string Value { get; set; }
public BMClaimsAuthorize() { }
public BMClaimsAuthorize(string ClaimType, string Value)
{
this.ClaimType = ClaimType;
this.Value = Value;
}
protected override bool AuthorizeCore(HttpContextBase context)
{
return context.User.Identity.IsAuthenticated
&& context.User.Identity is ClaimsIdentity
&& ((ClaimsIdentity)context.User.Identity).HasClaim(x =>
x.Type == ClaimType && x.Value == Value);
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
filterContext.Result = new RedirectResult("~/Account/DeniedAccess");
}
}
3 - 使用peject .BMTools(导入我的图书馆)
[BMClaimsAuthorize("AccessLevel", "General")]
public ActionResult Index()
{
ViewBag.Name = CurrentUser.Name;
ViewBag.Email = CurrentUser.Email;
ViewBag.StuffX = CurrentUser.ValueOf("StuffXId");
return View();
}
我创建了自己cotroller类(从控制器继承),可以帮助我得到了用户要求轻松
CurrentUser.Name
但那是另一个问题..
这是我实际的代码,我有2个表用户映射到一个角色和acceslevels
角色只会告诉他们是否是管理员或不(如果我以后需要多个角色保留为用户字段的表),他们是在控制器类的顶部只有adminds可以访问。
AccessLevel告诉其他所有事情(它们按方法过滤)。如果你需要更复杂的东西,你可以添加更多的声明(作为我的AccessLevel声明)并编辑BMClaimsAuthorize和AuthorizeCore方法以符合你的标准。
例如让它接受一个字符串数组,所以你发这样的事情
[BMClaimsAuthorize("AccessLevel", {"General","Admin","other"...})]
希望这有助于!
而且,在我的示例中,用户可以有许多AccessLevels,这意味着他们可以成为许多组的一部分 – Rafa
而我不认为使用NHibernate会是一个问题。 – Rafa
我已经整合了ASP.Net身份系统和我的解决方案,但是我需要像Ayende Rhino Security这样的扩展权限工具包,它可以管理我的团队,权限,操作......等等 – Arnaud
好的,所以我实现了我最后一个项目的一些功能我有角色和AccessLevels,我使用类控制器的角色和每个控制器的访问级别.1用户可以有1个角色和多个访问级别。我有一个名为“General”的访问级别,它被分配给每个人,另一个名为“MoneyGuy”,只有一组特定的人可以拥有 – Rafa