我希望你没事,这是我的第一个问题,我真的不知道从哪里开始,所以在这里,
我一直在尝试使用Microsoft Web api模板构建一个示例,在这个示例中,我必须根据角色授权用户,例如"管理员、主持人等"。所以,问题是,我不想像一样将所有这些角色都放在控制器的顶部
[Authorize ( Roles ="Admin, Moderators, etc...")]
我认为这不是一个好的做法,因为如果我在数据库中创建另一个角色会发生什么?我将不得不修改控制器以添加新的角色xD,真的很糟糕,不是吗?问题是,如何扩展AuthorizeFilter这样的类,从数据库中获取角色并使用控制器进行验证?我的意思是,如果有一个用户是管理员,授权它,反之亦然?
另一个问题是如何构建一个强大的authorizationfilter,它可以管理一些事情,比如如果用户处于主持人角色,但他唯一的权利是使用控制器中的Create操作?
我希望你能帮我举个例子。。。提前感谢
Ps。对不起我的英语
我同意基于角色的授权在某种程度上是有限的,authorize属性有点僵硬。
在某些情况下,基于角色的授权是不够的,你需要扩展它。你可以引入权限的概念。您可以声明,要获得执行操作的授权,您需要特定的权限,而不是要求您必须是特定角色的成员才能执行操作。因此,您使用RequiredPermissionAttribute而不是authorize属性。当然,您需要编写RequiredPermissionAttribute作为授权过滤器。
在数据库中,您有权限表、角色表、角色权限表和用户角色表。
因此,用户可以是一个或多个角色的成员。一个角色可以具有一个或多个权限。如果用户是具有特定权限的角色的成员,则他/她具有该权限。
所需权限过滤器检查登录的用户是否是具有该权限的角色的成员,如果不是,则返回401未授权。
这是一种更灵活的方法,操作不与角色绑定,角色也没有固定数量的权限。