基于角色的安全性 MVC & Mongodb



我正在使用ASP.NET MVC应用程序和MongoDB作为数据库。现在,我想实现基于角色的安全性和权限。例如,我们的角色"用户"one_answers" admin"。现在,一个具有角色"用户"的用户" a"有权查看页面,而其他一些用户说" b"可以允许查看和编辑带有" admin"的页面和用户的内容,可以具有所有权利视图,编辑,添加并删除。因此,我基本上想要访问控制列表。请让我知道使用MongoDB来实现这一目标的最佳方法。

谢谢

有很多步骤,所以我只能给您一个方向。

最简单的方法是使用Owin Authentication Middleware,并将每个访问存储为原则对象中的索赔,以便您可以在授权属性中使用ASP.NET的构建。

示例代码 -

OWIN身份验证中间软件

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "ApplicationCookie",
            LoginPath = new PathString("/Account/Login")
        });
    }
}

将访问作为角色主张存储在原理对象中

public void SignIn(User user, IList<string> roleNames)
{
    IList<Claim> claims = new List<Claim>
    {
        new Claim(ClaimTypes.Sid, user.Id.ToString()),
        new Claim(ClaimTypes.Name, user.UserName),
        new Claim(ClaimTypes.GivenName, user.FirstName),
        new Claim(ClaimTypes.Surname, user.LastName),
    };
    foreach (string roleName in roleNames)
    {
        claims.Add(new Claim(ClaimTypes.Role, roleName));
    }
    ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationType);
    IOwinContext context = _context.Request.GetOwinContext();
    IAuthenticationManager authenticationManager = context.Authentication;
    authenticationManager.SignIn(identity);
}

用法

[Authorize(Roles = "CanViewHome")]
public class IndexController : Controller
{
    [Authorize(Roles = "CanEditHome")]
    public ActionResult Edit()
    {
        return View();
    }
}

相关内容

  • 没有找到相关文章

最新更新