基于角色的安全 MVC & Mongodb
Role based security MVC & Mongodb
我正在 asp.net mvc 应用程序和 mongodb 作为数据库。现在我想实现基于角色的安全和权限。例如,我们有角色 "user" 和 "admin"。现在一个用户 "A" 和角色 "user" 有权查看页面,而其他一些用户说 "B" 可以有权查看和编辑页面内容,而角色 "admin" 的用户可以拥有查看、编辑、添加和删除的所有权限。所以基本上我想要访问控制列表。请让我知道使用 mongodb.
实现此目的的最佳方法
谢谢
步骤很多,只能给你一个方向。
最简单的方法是使用 OWIN 身份验证中间件,并将每次访问作为声明存储在 Principle 对象中,这样您就可以使用 ASP.Net 内置的授权属性。
示例代码-
OWIN Authentication Middle-ware
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie",
LoginPath = new PathString("/Account/Login")
});
}
}
Store access as role claim in Principle object
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();
}
}
我正在 asp.net mvc 应用程序和 mongodb 作为数据库。现在我想实现基于角色的安全和权限。例如,我们有角色 "user" 和 "admin"。现在一个用户 "A" 和角色 "user" 有权查看页面,而其他一些用户说 "B" 可以有权查看和编辑页面内容,而角色 "admin" 的用户可以拥有查看、编辑、添加和删除的所有权限。所以基本上我想要访问控制列表。请让我知道使用 mongodb.
实现此目的的最佳方法谢谢
步骤很多,只能给你一个方向。
最简单的方法是使用 OWIN 身份验证中间件,并将每次访问作为声明存储在 Principle 对象中,这样您就可以使用 ASP.Net 内置的授权属性。
示例代码-
OWIN Authentication Middle-ware
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie",
LoginPath = new PathString("/Account/Login")
});
}
}
Store access as role claim in Principle object
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();
}
}