问题标签 [role-base-authorization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
329 浏览

mysql - Rails 中可动态定制的基于组的授权

目前,在我的应用程序中,访问者只能拥有 3 个角色:

  • admin拥有所有特权
  • user可以在系统内执行多项关于他/她自己的动作
  • guest可以观看和发送错误报告

一切都是原始实现的,如下所示:在数据库中,每个用户都有一个字段,其中指示了他的存在admin(代表2该字段)或user1),并且在application_controller.rb其中仅检查if logged_in? && current_user.DB_FIELD == 2(或> 0),并且在必要的控制器中发生支票before_filter

然而,直到最近,当我们决定扩展系统的功能时,这样一个简单的实现仍然很有效,也就是说,部分是允许管理员将用户加入到组中,但也有一些时候。为了更好地理解我要问的问题,让我从我看到的方式描述情况(也许你可以提出更好和合乎逻辑的建议):

  1. 我是管理员。我打开/groups,然后查看组列表。
    • 什么是组?一方面,组是一组权限,另一方面,是在我的应用程序中应该具有相同权限的用户的组合。
    • 什么是许可?权限是分配给它的组的每个用户都可以执行的一项操作。
  2. 我想将新用户合并到一个组中,但该组不存在。所以我单击按钮(代表/groups/new),然后弹出创建组窗口。在那里,我有一个用于组名的文本字段、大量复选框,每个复选框代表一个权限、一个用于添加用户的字段和一个保存按钮。我写了组名,检查我要分配给这个组的所有权限,将用户添加到这个组(我将通过ajax搜索来实现这个:开始输入用户名,他/她出现,单击Enter,然后一个添加用户,然后在需要时重复这些操作 - 这是一种好的方法吗?),然后单击保存。
  3. 好的,我有一个有几个用户的新组。但是停下来,我意识到我忘了再添加一个人!我返回编辑组窗口 ( /groups/edit),并重新填写错误填写的字段。单击“保存” - 又是一些魔法(我的意思是,通过数据库更新操作)。

那么,我在最后阶段有什么?我可以自由地 c/r/u/d 组,管理其中的用户和权限,并以非常 GUI 驱动的方式执行它(我的意思是,复选框、ajax 搜索字段等)

两周以来,我一直在谷歌搜索/stackoverflowing/审查有关基于 rails 角色和基于组的授权的信息;已经找到了很多解决方案,如 cancan、easy_rolestroles等 gem,但在其中任何一个中都找不到如何实现基于组的方法,这是动态的(或可定制的?或动态可定制的?)。唯一真正 100% 满足我需求的是redmine权限和权限组方法,但由于其超过 9000 个功能,它过于复杂,所以我什至无法完全理解它是如何实现的,更不用说我自己实现了.

问题是(假设权限集是永久的,因此可以硬编码,并且组集是绝对免费的;此外,如果用户不属于任何组,他/她具有默认用户权限;此外,权限不仅适用于 c/r/u/d 操作,还适用于手动创建的方法):

  1. 实施上述系统的最佳方法是什么?我没有找到任何现有的宝石或方法?
  2. 如何轻松地为可扩展性存储权限和权限组?位掩码或单独的权限、权限组分配和组表?
  3. 如何轻松地将用户分组?用户数据库行中的组字段,还是单独的用户到组分配表?

优选地,分配给用户被添加到的组的权限立即应用于他,而无需任何用户重新登录。

提前谢谢你!

0 投票
12 回答
57357 浏览

asp.net-mvc - ASP.NET MVC 中基于角色的访问控制 (RBAC) 与基于声明的访问控制 (CBAC)

使用CBACRBAC的主要好处是什么?何时使用 CBAC 更好,何时使用 RBAC 更好?

我正在尝试理解 CBAC 模型的一般概念,但总体思路对我来说仍然不清楚。

0 投票
1 回答
120 浏览

asp.net-mvc - 我可以在 MVC 5 中应用用户创建的角色吗?

我在网上找到了大量解释如何使用 RoleManager 等在 MVC 5 中创建角色的示例,但我找不到答案是,是否可以动态应用在用户级别创建的角色(通​​过 UI ) 到应用程序的部分?

我不明白创建新角色的目的只是为了将它们存储在没有其他功能的数据库中?

任何意见表示赞赏。

这是我的角色创建代码的示例:

0 投票
1 回答
698 浏览

authorization - 授权:根据用户授权过滤数据

我们需要实现如下授权规则。

如果用户是超级管理员,则向他提供所有客户信息。比如订单信息。如果用户是客户管理员,则只提供他自己的客户信息。等等。

我们计划在 DAO 层实现过滤。

对于创建通用设计来处理这种情况有什么建议?假设我们的应用程序已经有一个用于 RBAC(基于角色的授权控制)的数据库模型。我们对任何 DAO 技术开放,例如 JPA 或 iBATIS 或原生查询等。

高级验收标准是授权策略应该是可配置的,并且可以在运行时更改。示例:如果客户管理员可以查看自己的数据,那么以后可以更改规则以允许他们查看自己和朋友的数据。

我们评估了 XACML 之类的授权策略,由于其复杂性,我们不喜欢实施它。我们正计划编写一个本土解决方案。任何建议,欢迎。

0 投票
1 回答
254 浏览

.net - SecurityException 与 UnauthorizedAccessException

我的应用程序具有基于角色的安全性。当用户尝试执行某些操作,而他所在的角色没有该权限时,我们会抛出异常。

现在我正在重构这段代码并找到基Exception类丑陋的用法。我应该使用什么类的实例?或者我应该继承一个?

编辑

我在框架中搜索,找到了两个。但它们都不适合。SecurityException似乎是 BCL 本身的一部分。UnauthorizedAccessExceptionIO命名空间下。在这种情况下,哪个异常最合适(继承自)

0 投票
1 回答
1829 浏览

permissions - 允许基于日期访问的权限设计模式

我正在寻找在我的应用程序中实现授权(而不是身份验证)方案的方法。

目前系统中有两个角色:A 和 B,但可能还有更多。用户只有一个角色。

基本上,我现在设置的是两个数据库表。一种是针对模型的基于角色的权限,另一种是针对特定用户的权限。我在想这样,用户可以根据他们基于角色的权限拥有一组默认权限,但是他们也可以授予/撤销特定的权限。

例如:

user_permissions表中,该allowed字段指定是否允许该操作,如果该值为 0,则可以撤销权限。

在另一个表中,我有每个动作的定义:

我这样做是为了当我检查模型的权限时,例如 ['create', 'delete'],我可以使用按位和操作来比较用户的权限和我正在检查的权限。例如,模型 X 可能具有以下模型操作:

如果我的用户/角色权限指定模型 X 的创建、查看和删除操作分别为 1、0 和 1,则根据model_actions表将其表示为 110。当我检查是否可以创建模型 X 时,我使用 create 为 4 的事实来构造位数组 100。如果 110 和 100 的按位与运算为 100,则权限有效。

无论如何,我想我已经找到了一个细粒度的权限设计模式。如果不是,请随时对我进行有关该主题的教育。

我的问题的实际焦点涉及以下内容:

我的一些模型具有时间相关的动作。例如,您只能在 created_at 日期后不超过 24 小时内删除模型 Y。

我在想的是在创建模型时自动创建一个 cron 作业,该作业将在发生这种情况的日期更新权限。对于模型 Y,我想在 user_permissions 中插入一条记录,以撤销该模型的“删除”操作。

我的问题是:这是可取的吗?

编辑

如果我在 SQL 表中包含另一行,它指定了“翻转”(flipDate) 权限的日期,该怎么办?如果定义了翻转日期,并且如果当前日期在翻转日期之后,则权限被撤销。这似乎比一系列 cron 作业更容易管理,尤其是在模型可能更新时。

0 投票
1 回答
772 浏览

spring - Spring基本认证

嗨,我有一些用于身份验证的登录表单配置,我想将我的简单登录表单替换为

表现得像这种形式并使用了 spnegoAuthenticationProcessingFilter:

这是我的弹簧安全配置:

这个有可能 ?

0 投票
1 回答
479 浏览

asp.net-mvc - 带有 Web API 的 ASP.NET MVC 项目:简单的授权/身份验证是乌托邦吗?

我想构建一个相当简单的中型应用程序。

但它必须在两个方面很强大:

1)具有最少角色实现的身份验证/授权(用户将是普通用户或专业用户)

2) 用户数据加密。

我很高兴看到 Identity v2 的出现,并认为现在是开始学习的时候了。

不幸的是,所有资源都遵循 Visual Studio 模板中预构建逻辑的逻辑。在那之后,如果你真的想掌握身份,你根本就做不到……如果你不喜欢 EF 的持久性,那你就很不幸……

我当然无法管理安全框架的自定义重写。

令人沮丧的是,我只是找不到一种简单的方法来将简单的身份验证/授权放在我的 MVC/Web Api 项目中。

太令人沮丧了,我开始考虑将它构建到 Laravel ......

于是我开始思考我应该怎么做?

我阅读了表单身份验证的建议:ASP.NET MVC 中的自定义身份验证和授权

我也读过这篇非常好的SO 文章

但是我需要决定一种对我的用户安全的方式,我只是认为 MS 身份虽然在 v2 中只是一个被宠坏的孩子,想要一切......

0 投票
2 回答
437 浏览

asp.net-mvc - 每次请求后 ASP MVC 4 用户注销

我正在开发在我的开发系统上运行良好的 Asp Mvc 4 项目,它在我的演示托管服务器上也运行良好。但是当我在客户端的服务器上上传网站时,它要求在每个页面上登录。当我登录一个页面时,我可以在该页面上执行操作。但如果它打开另一个页面,它会将我重定向到再次登录页面。

我无法理解原因。因为它在我的本地系统和我的演示主机上都可以正常工作。但是在客户端托管上它的行为是这样的。

我正在使用自定义授权属性。但我在另一个运行良好的站点上使用此方法。

请有任何想法或解决方案。

以下是我的 web.config 文件:

0 投票
1 回答
52 浏览

model-view-controller - 控制器中的多级 [Authorize(Roles)]

所以我有一个控制器,我想锁定不同级别的成员资格。假设我有以下角色:查看者 LocalAdmin GlobalAdmin

这是一个管理控制器,所以我首先确保用户必须使用[Authorize]控制器本身的属性登录

但是,查看器不应访问此控制器,因此我需要指定用户必须至少是 LocalAdmin,因此属性需要是[Authorize(Roles = "LocalAdmin")].

我的问题是关于这个控制器中只能由 GlobalAdmin 执行的更高级别的操作。有没有办法将所有操作至少分配给 LocalAdmin,然后用 覆盖一些[Authorize(Roles = "GlobalAdmin")]