我如何使用自己的数据库表进行MVC 4用户控制(并在角色表中使用布尔字段进行授权)?

时间:2013-07-25 07:26:29

标签: asp.net-mvc asp.net-mvc-4 asp.net-membership simplemembership asp.net-authentication

大家好,我几天来一直在寻找答案并且已经阅读了几篇帖子,但仍然很困惑。

我正在使用一个用户表,其中的字段包括名字,姓氏,电子邮件,密码,RoleID以及电话号码等其他内容。

此外,我还有一个“角色表”,其中字段代表字符串中的“角色名称”,其他几个字段代表不同的布尔类型访问,例如“AccessToAlterItemInformation”,如果具有此类角色的用户具有(AccessToAlterItemInformation) == True)将被授予对项目编辑页面的访问权限。 关于这个主题,我想问几个问题:

  1. 代码如:
  2. [授权(角色=“管理员”)]

    用于授权我看到的几个帖子,但我想做更像

    的事情
         [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等)并尽可能少地做出改变,因为我真的只有很少的时间去做这个项目。请帮我!提前谢谢!

    抱歉我的英语不好

1 个答案:

答案 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+

希望有所帮助