2016-04-08 54 views
0

我实际上是用NHibernate开发一个带有ASP.Net MVC的网站 我需要管理组,页面和其他东西的权限 我希望我的角色,权限,操作,组,以及在我的数据库中的所有事情。ASP.Net的安全工具包MVC

而且像旧的post我想知道Ayende Rhino Security toolkit是否仍然相关,或者是否还有其他相关的通用工具包?对于我的新项目,我已经使用了标识系统

http://www.asp.net/identity

的ASP.NET识别系统

回答

0

旨在取代以前的ASP.NET成员资格和简单的会员系统。它包括配置文件支持,OAuth的集成,与OWIN工作,并随随Visual Studio的2013年

特别是ASP.NET模板本教程帮助了我很多第一次

http://benfoster.io/blog/aspnet-identity-stripped-bare-mvc-part-1

+0

而我不认为使用NHibernate会是一个问题。 – Rafa

+0

我已经整合了ASP.Net身份系统和我的解决方案,但是我需要像Ayende Rhino Security这样的扩展权限工具包,它可以管理我的团队,权限,操作......等等 – Arnaud

+0

好的,所以我实现了我最后一个项目的一些功能我有角色和AccessLevels,我使用类控制器的角色和每个控制器的访问级别.1用户可以有1个角色和多个访问级别。我有一个名为“General”的访问级别,它被分配给每个人,另一个名为“MoneyGuy”,只有一组特定的人可以拥有 – Rafa

0

你也可以考虑MembershipReboot。据我所知,它仍然超越了Asp.Net Identity,尽管它最初是为克服会员缺点而完成的。

关于犀牛安全工具包,我不知道它是在哪个状态。

0

这里是什么,我做了一个例子

第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"...})] 

希望这有助于!

+0

而且,在我的示例中,用户可以有许多AccessLevels,这意味着他们可以成为许多组的一部分 – Rafa