0

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

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

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

  1. 像这样的代码:

[授权(角色=“管理员”)]

习惯于对我看到的几个帖子进行授权,但我想做更多类似的事情

     [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 等)并尽可能少地进行更改,因为我真的只剩下很少的时间来做这个项目了。请帮我!提前致谢!

对不起我糟糕的英语

4

1 回答 1

1

您必须定义一个自定义 Authorize 属性来执行此操作。

[Authorize(user.role.AccessToAlterItemInformation == true)]

应该改成这样。

[Authorize(Permissions = Access.EditItemInformation)]

其中Access是 Flag 枚举,Permissions 是您定义的自定义 Authorize 属性类中的成员变量(Access 类型)。

您还必须定义枚举标志本身

[Flags]
public enum Access: ulong
{
    CreateItemInformation = 0x00000002,
    EditItemInformation = 0x00000004,
    DeleteItemInformation = 0x00000008,
}

通过使用标志,您将能够提供多个标志作为权限

[Authorize(Permissions = Access.EditItemInformation || Access.CreateItemInformation)]

在重写的 AuthorizeCore 方法中,您将检查权限成员变量是否具有不同类型的访问标志,如果授权则返回 true,否则返回 false。这是您检查给定访问标志是否在权限变量中的方式

Permissions.HasFlag(Access.EditItemInformation);

这就是您实现自定义授权属性的方式

带有权限代码的 ASP.NET MVC 4 自定义授权属性(无角色)

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+

希望有帮助

于 2013-07-25T08:54:02.407 回答