Questions tagged «permissions»

10
这是什么意思?“用户不应该决定它是否是管理员。特权或安全系统应如此。”
问题中使用的示例将最少的数据传递给函数,以确定是否用户是管理员的最佳方法。一个常见的答案是: user.isAdmin() 这引起了评论,该评论被重复了多次并被多次投票: 用户不应该确定它是否是管理员。特权或安全系统应该。与课程紧密联系并不意味着将其纳入课程是一个好主意。 我回答, 用户没有决定什么。用户对象/表存储有关每个用户的数据。实际用户不会改变自己的一切。 但这没有效果。显然,存在潜在的视角差异,这导致沟通困难。有人可以向我解释为什么user.isAdmin()不好,并绘制一个简短的草图来“完成”吗? 确实,我看不到将安全与受保护系统分开的优势。任何安全性文字都将要求从一开始就将安全性设计到系统中,并在开发,部署,维护乃至报废的每个阶段都要加以考虑。它不是可以固定在侧面的东西。但到目前为止,此评论有17票赞成票,表明我错过了一些重要的内容。

2
基于角色与权限的访问控制
我试图了解访问控制(授权)时角色和权限之间的固有权衡。 让我们从一个给定的开始:在我们的系统中,“ 权限”将是一个细粒度的访问单位(“ 编辑资源X ”,“ 访问仪表板页面 ”,等等)。一个角色将是1 +权限的集合。一个用户可以具有1个以上的角色。所有这些关系(用户,角色,权限)都存储在数据库中,可以随时根据需要进行更改。 我的担忧: (1)检查用于访问控制的角色有何“坏处”?通过检查权限可获得什么好处?换句话说,以下这两个摘要有什么区别: if(SecurityUtils.hasRole(user)) { // Grant them access to a feature } // vs. if(SecurityUtils.hasPermission(user)) { // Grant them access to a feature } 和: (2)在这种情况下,角色甚至可以提供什么有用的价值?我们不能直接为用户分配1+权限吗?角色提供什么抽象的具体价值(有人可以提供具体示例)吗?

5
可以多次应用并且永远不会改变状态的单词是什么?
我想记住一个单词,我认为它与计算或数据库理论有关。最接近的同义词是,atomic但不完全是。基本上,这是一种计算,即使连续运行多次也应产生相同的结果,这意味着它不会自己产生副作用。 我在有关chmod命令(或其他一些与权限相关的操作)的堆栈溢出答案中专门遇到了这个词。 希望这足以进行下去。在Wikipedia上戳戳并没有太大帮助。

6
Java中的动态代码评估-聪明还是草率?
我正在尝试为我的应用程序在Java中创建一个灵活的ACL框架。 许多ACL框架都建立在规则白名单上,其中规则的形式为owner:action:resource。例如, “ JOHN可以查看资源FOOBAR-1” “ MARY可以查看资源FOOBAR-1” “ MARY可以编辑资源FOOBAR-1” 这很有吸引力,因为规则可以轻松地序列化/持久化到数据库。但是我的应用程序具有复杂的业务逻辑。例如, “部门1中具有5年以上资历的所有用户都可以查看资源FOOBAR-1,否则未经授权” “部门2中的所有用户,如果日期是2016年3月15日之后,则可以查看资源FOOBAR-2,否则未经授权” 乍一想,设计一个可以处理无限复杂规则的数据库模式将是一场噩梦。因此,似乎我需要将它们“烘焙”到编译的应用程序中,为每个用户评估它们,然后根据评估结果生成owner:action:resource规则。 我想避免将逻辑烘焙到已编译的应用程序中。 因此,我正在考虑以谓词:action:resource的形式表示规则,其中谓词是确定是否允许用户的布尔表达式。该谓词将是Java的Rhino引擎可以评估的JavaScript表达式的字符串。例如, return user.getDept() == 1 && user.seniority > 5; 这样,可以轻松地将谓词保存到数据库中。 这很聪明吗?这是草率的吗?这是花哨的吗?这是过度设计的吗?这样安全吗(显然,Java可以将Rhino引擎沙箱化)。

5
用户权限检查应该在哪里进行,并且MVC由谁进行?
用户权限检查应该在模型或控制器中进行吗?谁应该处理权限检查,User对象或某些UserManagement助手? 应该在哪里发生? 检入控制器: class MyController { void performSomeAction() { if (user.hasRightPermissions()) { model.someAction(); } } ... 在Controller中进行检查有助于简化模型的操作,因此我们可以将所有逻辑保留在Controller中。 签入模型: class MyModel { void someAction() { if (user.hasRightPermissions()) { ... } } ... 通过将检查放到模型中,我们使模型复杂化,而且还确保我们不会意外允许用户执行他们不应该在Controller中进行的操作。 又是谁? 一旦我们确定了该地点,谁应该进行检查?用户? Class User { bool hasPermissions(int permissionMask) { ... } ... 但是,了解自己的能力并不是用户的真正责任,所以也许是一些帮助者? Class UserManagement { bool hasPermissions(User …
26 mvc  permissions 

2
实施DDD:用户和权限
我正在研究一个小型应用程序,试图掌握域驱动设计的原理。如果成功,这可能是一个更大项目的试验。我正在尝试遵循《实现域驱动的设计》(由Vaughn Vernon撰写)一书,并试图实现一个类似的简单讨论论坛。我还在github上签出了IDDD示例。我在采用身份和案件访问权方面遇到一些困难。让我给出一些背景信息: 我(希望)理解了将用户和权限逻辑分开的原因:这是一个支持域,并且是一个不同的有界上下文。 在核心域中,没有用户,只有作者,主持人等。这些是通过使用服务延伸到“身份和访问”上下文,然后将接收到的User对象转换为and主持人而创建的。 以相关角色作为参数调用域操作:例如: ModeratePost( ..., moderator); 域对象的方法检查给定的主持人实例是否不为空(如果从“身份和访问”上下文中询问的用户不具有主持人角色,则主持人实例将为空)。 在一种情况下,它会在更改帖子之前进行另一项检查: if (forum.IsModeratedby(moderator)) 我的问题是: 在后一种情况下,安全性关注点是否不会再次混入核心域?以前,这些书指出“可以与谁一起发布主题,或者在允许的条件下发布。论坛只需要知道作者正在这样做”。 本书中基于角色的实现非常简单:当主持人是核心域时,它会尝试将当前的userId转换为主持人实例,或在需要时将其转换为作者。服务将以适当的实例进行响应;如果用户没有所需的角色,则该服务将为null。但是,我看不到如何适应更复杂的安全模型。我正在尝试的当前项目具有一个包含组,ACL等的相当复杂的模型。 即使规则不是很复杂,例如:“帖子只能由其所有者或编辑者编辑”,但这种方法似乎无法使用,或者至少我看不到实现该方法的正确方法。 通过向Identity and Access上下文询问OwnerOrEditor实例并不适合,我最终会在核心域中得到越来越多与安全性相关的类。另外,我不仅需要将userId传递给安全上下文,还需要将受保护资源的标识符(帖子,论坛等的ID)传递给安全性上下文,该上下文可能不关心这些事情(对吗? ) 通过将权限拉到核心域并在域对象的方法或服务中检查它们,我将得出结论:将安全问题与域混合在一起。 我在某个地方读过(并且我倾向于同意),这些与权限相关的事物不应成为核心域的一部分,除非安全性和权限是核心域本身。像上面给出的那样简单的规则是否足以使安全性成为核心域的一部分?

2
如何设计基于角色的访问控制?
我试图遵循基于角色的访问控制模型来限制用户在系统中可以执行或不能执行的操作。 到目前为止,我具有以下实体: 用户 -将使用该系统的人员。这里有用户名和密码。 角色 -用户可以拥有的角色的集合。诸如经理,管理员等 资源之类的东西-用户可以操纵的东西。像合同,用户,合同草稿等 操作 -用户可以使用资源执行的操作。像创建,读取,更新或删除。 现在,我在图中有这样关系的地方对此表示怀疑: 操作(0 .. *)在 资源(0 .. *)上执行,该资源生成一个名为权限的表,该表将存储该操作和资源。 权限表如下所示(它的一行): ID: 1,操作:创建,资源:合同。 这意味着许可,以创建一个合同。 我这样做是因为我觉得某些资源可能无法进行各种操作。例如,对于注册合同,用户可以上传文件,但是此操作不适用于注册提供商。 所以,现在当管理员将被赋予权限的角色,他不会有资源的清单,在系统中注册的每一个操作。 我认为每种资源都有自己的可以在他身上执行的操作的集合。 我可以澄清一下某些事情是无法理解的。 这是实施rbac的正确方法吗? 编辑 我的意思是,通过拥有一个包含操作和资源的权限表,我有了两个额外的表,因为我想将资源与操作相关联。我本来也可以完成资源具有权限的权限,权限表将存储这些权限。 但是然后发生的是,当管理员分配资源时,某些权限甚至对于某些资源都不存在。 因此,我想从数据库设计的角度来了解具有一个列操作和另一个资源的表权限是否正确?如果这样下去我会遇到问题吗?

8
惩罚用户输入不安全的密码[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我正在考虑限制选择不安全密码的用户的权限(密码的不安全性由长度,使用的字符类型(大/小写,数字,符号等)决定,是否可以使用)。 (位于彩虹表中)以限制帐户遭到破坏后所造成的损失。 我还没有这个想法的申请,但是说我正在写一个论坛之类的东西:使用1234作为密码的用户可能必须在发布前填写验证码,否则将受到诸如此类的严格反垃圾邮件措施的约束。作为超时或贝叶斯过滤器拒绝其内容。如果此论坛是非常分层的,允许“提升”主持人或通过某种方式进行的其他活动,这将阻止他们完全获得特权或告诉他们他们具有特权,但不允许他们在不进行任何更改的情况下行使其特权。密码。 当然,这不是唯一的安全措施,但是它可以很好地替代其他良好的安全做法。 你怎么看?这是否只是做的太过分,将注意力从更重要的安全实践上转移了下来,还是限制风险并鼓励用户使用更安全的密码的一种好方法(并希望说服您正在使用良好的安全实践的人们)?

1
实施简单的基于属性的访问控制(ABAC)的建议路线图是什么?
在阅读有关ACL和RBAC的信息时,我似乎很容易理解-可以使用用户名或角色来访问资产。我还可以看到如何实现这些目标。 即,此图像为我提供了ACL和RBAC的清晰视图(如上图所示,我可以继续设计数据库表):( 图像由pressbooks提供) 我正在努力的是ABAC。到目前为止,我发现的各种图像都是手工绘制的,或者过于复杂,或者建议使用第三方外部实体进行授权。还是给出奇怪的属性示例,我并不完全确定该如何使用。 起始范例 因此,让我从现实生活中入手。假设我有一家拥有70-200人的公司。我要保护的资产是一个包含许多不同页面的网站。我希望允许某些人使用某些资产。 例如,我希望某人Leslie可以访问名为的网页Price Manager,并只允许该人管理Travel该页面上价格组的价格,而不能管理Product同一页面上组的价格。我将如何使用ABAC实施此操作? 到目前为止,我猜测是我可以分配Leslie一些属性(但是哪些属性是什么?这些属性是什么?),然后有一个存储这些属性的数据库表。然后,我可以设计一个引擎,查看这些属性(但不像LeslieRBAC那样将其视为“角色”),并从中决定是否授予对该页面的访问权限。该引擎的外观如何?这是一个简单的if / else块吗?还有吗 如果莱斯利后来改变立场,而有人需要更改访问权限,会发生什么情况?如果她需要转移访问权限Product并撤消访问权限,将会是什么样Travel?如何将它,如果她需要访问撤销的编码Price Manager页共,因此没有再访问没有Travel,或者Product? 在我的案例中,资产只是为了重述Price Manager,而用户可以访问该页面上的各种价格组,例如Travel定价,Product定价等。 我正在寻找的是一个合理的完整路线图,以澄清细节并实现实现,我可以不加猜测地实施它。也就是说,它可以在概念上完成和/或具有我可以可视化数据库结构的特定示例,等等。 好处:ABAC是否是满足相对较小的许可需求(例如,管理70-200个人并访问约150-450资产)的正确方法?坚持使用ACL / RBAC会更好吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.