大家好,我几天来一直在寻找答案并且已经阅读了几篇帖子,但仍然很困惑。
我正在使用一个用户表,其中的字段包括名字,姓氏,电子邮件,密码,RoleID以及电话号码等其他内容。
此外,我还有一个“角色表”,其中字段代表字符串中的“角色名称”,其他几个字段代表不同的布尔类型访问,例如“AccessToAlterItemInformation”,如果具有此类角色的用户具有(AccessToAlterItemInformation) == True)将被授予对项目编辑页面的访问权限。 关于这个主题,我想问几个问题:
[授权(角色=“管理员”)]
用于授权我看到的几个帖子,但我想做更像
的事情 [Authorize(user.role.AccessToAlterItemInformation == true)] //I know this is not right but something similar
OR:
if (User.Roles.AccessToAlterItemInformation == True)
{
//Do something as Access granted
}
我怎么能实现这个目标? (或者其他一些方法,至少可以达到类似的目的,所以我可以根据不同的访问方式建立网站授权)
-2。根据上述第一个问题的要求,我必须使用已创建的用户表和角色表,使用带Razor的MVC 4 Web应用程序实现成员/用户系统。我怎么能实现这一目标?我想尽可能多地使用已经存在的东西(asp.net,simplemembership等)并尽可能少地做出改变,因为我真的只有很少的时间去做这个项目。请帮我!提前谢谢!
抱歉我的英语不好
答案 0 :(得分:1)
您必须定义自定义Authorize属性才能执行此操作。
[Authorize(user.role.AccessToAlterItemInformation == true)]
应该改为这样的。
[Authorize(Permissions = Access.EditItemInformation)]
其中Access
是Flag枚举,权限是您定义的自定义Authorize属性类中的成员变量(类型为Access)。
你还必须自己定义枚举标志
[Flags]
public enum Access: ulong
{
CreateItemInformation = 0x00000002,
EditItemInformation = 0x00000004,
DeleteItemInformation = 0x00000008,
}
通过使用标志,您将能够提供多个标志作为权限
[Authorize(Permissions = Access.EditItemInformation || Access.CreateItemInformation)]
在重写的AuthorizeCore方法中,您将检查权限成员变量是否具有不同类型的Access标志,如果已授权则返回true,否则返回false。这是检查给定的Access标志是否在Permission变量
中的方法Permissions.HasFlag(Access.EditItemInformation);
这是您实现自定义授权属性
的方法ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)
Enum Flags的值应为2的幂。请查看这些文章以了解标志。
http://www.codeproject.com/Articles/13740/The-Beginner-s-Guide-to-Using-Enum-Flags
http://forums.asp.net/t/1917822.aspx/1?+use+of+Enum+with+flags+in+practicle+
希望有所帮助