尽管我已经在这里待了一段时间,但这是我第一次提出问题,所以请温柔地对待我.
我正在使用ASP.NET MVC 3,我想创建一个自定义,Principal所以我可以存储更多关于当前用户的信息,而不是标准,因此不必经常访问数据库.这是我追求的相当标准的东西.我们先说一下电子邮件地址和用户ID.
我决定将对象存储在缓存中,因为我知道不建议将它存储在会话中.
我也不想继续构建User对象,所以我想覆盖User控制器中的对象.所以我可以去User.UserId保证一些东西.
所以我创建了一个这样的自定义主体:
public class MyPrincipal : IPrincipal
{
public MyPrincipal(IIdentity ident, List<string> roles, string email, Guid userId)
{
this._identity = ident;
this._roles = roles;
this._email = email;
this._userId = userId;
}
IIdentity _identity;
public IIdentity Identity
{
get { return _identity; }
}
private List<string> _roles;
public bool IsInRole(string role)
{
return _roles.Contains(role);
}
private string _email;
public string Email
{
get { return _email; …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我建立一个动态菜单ASP.NET MVC4 web application.当我构建菜单时,我想确保用户不应该访问的菜单项不会显示在菜单中.
我正在使用表单身份验证和[Authorize]每个页面需要给定角色的属性.
给定两个字符串(Controller and Action)和一个登录用户,如何确定用户是否可以访问该控制器操作?
我的所有菜单数据都存储在数据库中.我渲染菜单的计划是构造菜单数据的JSON对象并将其嵌入到View中.然后客户端我将使用Handlebars.js菜单JSON object并将其插入模板.
我正在尝试检查用户的给定Controller/Action的权限,因为我正在渲染菜单数据.我最初的想法是使用反射并查找控制器操作方法并检查是否存在Authorize属性,并检查当前登录用户是否具有访问该页面的必要角色.如果不是,则不会呈现菜单项.
我总是不愿意使用reflection,通常往往会有一种更简单的做事方式.
我一直在尝试为我正在开发的项目创建一个基于动态角色的导航解决方案.
导航应仅显示与用户角色相关的链接,例如:管理员将具有查看应用程序统计信息,管理客户帐户等的链接,而标准用户将拥有管理其帐户的链接,与朋友交流等等..
我目前有一个名为Navigation的局部视图,其中包含一些用于角色检查的基本条件语句以及用于显示相应链接的混合标记.这有效,但是,我知道它很快就会变得无法管理.
导航局部视图:
@if(User.IsInRole("Admin")) {
<li><a href="#">Statistics</a></li>
<li><a href="#">Accounts</a></li>
<li><a href="#">Dashboard</a></li>
}
@if(User.IsInRole("User")) {
<li><a href="#">Account</a></li>
<li><a href="#">Friends</a></li>
}
// code omitted
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个逻辑脱离视图并让Controller处理这个?