首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.Net MVC的安全工具包

ASP.Net MVC的安全工具包
EN

Stack Overflow用户
提问于 2016-04-09 01:17:18
回答 3查看 61关注 0票数 0

我实际上是用NHibernate开发一个用ASP.Net MVC开发的网站,我需要管理组的权限,页面和其他一些东西,我想在我的数据库中我的角色,权限,操作,组和所有类似的东西。

像旧的post一样,我想知道Ayende Rhino安全工具包是否仍然相关,或者是否有任何其他相关的通用工具包?

EN

回答 3

Stack Overflow用户

发布于 2016-04-09 01:29:16

在我的新项目中,我使用了身份识别系统

http://www.asp.net/identity

ASP.NET身份系统旨在取代以前的ASP.NET成员资格和简单的成员资格系统。它包括配置文件支持,OAuth集成,与OWIN一起工作,并包含在Visual Studio2013附带的ASP.NET模板中。

特别是,这篇教程第一次对我帮助很大。

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

票数 0
EN

Stack Overflow用户

发布于 2016-04-09 05:42:04

您也可以考虑使用MembershipReboot。据我所知,它仍然超越了Asp.Net身份,尽管它最初是为了克服会员缺点而做的。

关于Rhino安全工具包,我不知道它处于哪种状态。

票数 0
EN

Stack Overflow用户

发布于 2016-04-09 06:00:46

下面是我所做的一个例子

第1步-为用户创建声明

代码语言:javascript
复制
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

代码语言:javascript
复制
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 (导入我的库)

代码语言:javascript
复制
[BMClaimsAuthorize("AccessLevel", "General")]
public ActionResult Index()
{
    ViewBag.Name = CurrentUser.Name;
    ViewBag.Email = CurrentUser.Email;
    ViewBag.StuffX = CurrentUser.ValueOf("StuffXId");
    return View();
}

我创建了自己的控制器类(继承自控制器),它可以帮助我轻松地获取用户声明

代码语言:javascript
复制
CurrentUser.Name

但这是另一个话题..

这是我的实际代码,我有两个表,其中用户映射到一个角色和访问级别

角色只告诉他们是否是管理员(以表的形式保存,而不是用户字段,以防我以后需要多个角色),他们位于只有管理员可以访问的控制器类的顶部。

AccessLevel告诉其他所有事情(它们按方法过滤)。如果您需要更复杂的东西,您可以添加更多的声明(如我的AccessLevel声明),并编辑BMClaimsAuthorize和AuthorizeCore方法以满足您的条件。

例如,让它接受一个字符串数组,因此您发送如下内容

代码语言:javascript
复制
[BMClaimsAuthorize("AccessLevel", {"General","Admin","other"...})]

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36505578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档