保护Web api基于角色

时间:2015-02-07 02:17:07

标签: sql-server asp.net-mvc asp.net-web-api asp.net-identity asp.net-authorization

我希望你没事,这是我的第一个问题,我真的不知道从哪里开始,所以在这里,

我一直在尝试用Microsoft Web api模板构建一个示例,我必须根据角色授权用户,例如“管理员,版主等......”所以,事情是我不想要的将所有这些角色放在控制器的顶部,如

[Authorize ( Roles ="Admin, Moderators, etc...")]

我认为这不是一个好习惯,因为如果我在我的数据库中创建另一个角色会怎么样?我将不得不修改控制器以添加新的角色xD,真的很糟糕,不是吗?所以问题是。如何扩展像AuthorizeFilter这样的类来从数据库中获取角色并使用控制器进行验证?我的意思是,如果有一个用户在角色管理员授权它,反之亦然?

另一个问题是如何建立一个伟大的authorzationfilter,它可以管理类似于用户是否处于主持人角色但他唯一的权利是在控制器中使用创建操作?

我希望你能帮我一个例子...... 提前致谢

聚苯乙烯。对不起我的英文

1 个答案:

答案 0 :(得分:1)

我同意基于角色的授权在某种程度上是有限的,授权属性有点僵硬。

在某些情况下,基于角色的授权是不够的,您需要扩展它。您可以引入权限概念。您可以声明有权执行您需要特定权限的操作,而不是要求您必须是特定角色的成员来执行操作。因此,使用RequiredPermisionAttribute而不是authorize属性。当然,您需要将RequiredPermissionAttribute写为授权过滤器。

在数据库中,您拥有权限表,RolesTable,RolePermissions表和UsersInRole表。

因此,用户可以是一个或多个角色的成员。角色可以拥有一个或多个权限。如果用户是具有该权限的角色的成员,则该用户具有特定权限。

所需的权限过滤器检查登录的用户是否是具有该权限的角色的成员,如果没有,则返回401未授权。

这是一种更灵活的方法,操作与角色无关,角色没有固定数量的权限。