【问题标题】:Securing Web api Role Based保护基于角色的 Web api
【发布时间】:2015-04-07 07:21:40
【问题描述】:

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

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

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

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

另一个问题是如何构建一个出色的授权过滤器,它可以管理用户是否处于主持人角色但他唯一的权利是使用控制器中的创建操作?

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

附言。对不起我的英语

【问题讨论】:

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


    【解决方案1】:

    我同意基于角色的授权在某种程度上受到限制,并且授权属性有点僵化。

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

    在数据库中有 Permissions 表、RolesTable、RolePermissions 表和 UsersInRole 表。

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

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

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

    【讨论】:

    • 太棒了!正文,我想通了,我正在构建自己的权限表,并将角色表用于其他目的,然后将用户添加到管理员角色,然后为他分配权限(编辑、创建、删除)并在在我的操作中,我管理权限。非常感谢。
    猜你喜欢
    • 2019-08-11
    • 2020-09-24
    • 1970-01-01
    • 2021-11-12
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2012-12-06
    相关资源
    最近更新 更多