Questions tagged «access-control»

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+权限吗?角色提供什么抽象的具体价值(有人可以提供具体示例)吗?

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引擎沙箱化)。

6
在访问控制层之前先具有验证层是否可以
我正在创建一个API组合式Web应用程序,在此应用程序中,我们有不同的层,各自在工作。 第一层是验证用户输入的验证层,如果通过验证,则将其移至第二层(即访问控制层),否则返回错误消息 第二层是访问控制,它检查用户是否具有执行其想要执行的任务的权限,如果用户具有权限,则将请求移至下一层,否则返回错误消息 第三层是控制器层,我们具有应用逻辑 我的问题是在访问控制之前可以具有验证层吗?如果用户尝试执行用户没有权限的任务并且我们正在发回验证错误消息怎么办?用户将向端点发送请求并与验证层进行对话,并且仅在通过验证之后,他才会看到消息You can't access this! 我觉得很奇怪,所以这样还好吗?或者在基础设施方面我还有其他选择吗?

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

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会更好吗?

4
私有方法何时应采用公共路线访问私有数据?
私有方法何时应采用公共路线访问私有数据?例如,如果我有这个不可变的“乘数”类(我知道有点作弊): class Multiplier { public: Multiplier(int a, int b) : a(a), b(b) { } int getA() const { return a; } int getB() const { return b; } int getProduct() const { /* ??? */ } private: int a, b; }; 我可以通过两种方式实现getProduct: int getProduct() const { return a * b; …

2
访问控制的标准做法(设计模式)
我正在查看我的界面设计,并且在确定要访问的a user和a的情况下subject,我正在努力确定哪种方法是实现基于角色的访问控制的最“正确”方法user。 据我所知,我有三个核心选择(第四个是前三个的混蛋,第五个是第四个的调整): 使用subject具有以下权限的列表来查询user:subject.allowAccess(user.getPermissionSet) user使用subject所需的权限列表查询-user.hasPermissionTo(subject.getRequiredPermissions()) 查询第三方以找到权限的交集- accessController.doPermissionSetsIntersect(subject.permissionSet, user.getPermissionSet()) 查询subject/ user,同时将“决定”委托给第三方类 有user尝试访问subject,并抛出一个错误,如果不允许访问 我倾向于选项四-具有subject包含一个accessController字段,在其中调用subject.userMayAccess(User user)将操作委托给la: class Subject { public function display(user) { if(!accessController.doPermissionSetsIntersect(this.permissionSet, user.getPermissionSet())) { display403(); //Or other.. eg, throw an error.. } } } ..但这又引发了进一步的问题: 应该accessController是字段还是静态类..? 是否应该subject 知道查看权限需要什么权限? 关于召唤,最少知识的原理在哪里起作用subject.display()?subject.display()曾经的呼叫者应该知道访问控制有效吗?(subject.display()最终的“模板方法” 在哪里) 具有subject.display()管理访问控制,在用户没有所需权限的情况下引发异常? 在这种情况下,什么被认为是“最佳实践”?实际执行检查的责任应该在哪里发生? 由于这既是一项学术性的专业知识,其又将逐步发展为实施,因此将不胜感激对设计模式的引用。
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.