首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非RBAC用户角色和权限系统:检查用户的城市

非RBAC用户角色和权限系统:检查用户的城市
EN

Stack Overflow用户
提问于 2010-05-15 10:45:33
回答 1查看 1.1K关注 0票数 2

我们目前正在中为设计一个web应用程序(ASP.NET)中的用户角色和权限系统,并且似乎有几个案例表明不适合于经典的基于角色的访问控制(RBAC)中的。我将发表几个问题,每一个专门针对一个特定的案例,这是第一篇文章。

我们有以下案例:如果用户居住在特定城市,则不允许用户查看特定页面。这是一个简单的情况,其编码方式如下:

if (User.City == “Moscow”)

// Allow the user to view the page.

else

// Do not allow the user to view this page.

虽然这个例子非常简单和简单,但它与RBAC无关。

在StackOverflow上,有人称它为基于属性的访问控制.

在经典的RBAC环境下,这种情况似乎应该是这样设计的:引入一个权限“人居住的城市”,这个权限将拥有一个属性城市。然后创建一个角色,向其添加一个类型为“City=莫斯科”的权限,并将该角色分配给用户。看起来非常笨重的

问题是,在我们的权限系统中引入这种非RBAC方法是否可以接受--这是否破坏了设计?

这似乎是一个原始的问题,但我们发现大多数应用程序都使用纯RBAC,我们开始认为我们可能做错了什么。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2010-05-15 14:46:48

对于基于属性的访问控制来说,这将是一个很好的例子。但是,如果您不介意查看PHP实现,Zend Framework有一个基于角色的访问控制,它使用断言来解决更多的特殊情况:

http://framework.zend.com/manual/en/zend.acl.advanced.html

标准规则允许角色对资源执行操作。第四个参数只允许在满足某些条件时应用规则。伪码:

代码语言:javascript
复制
allow(member, view, page) // standard
allow(member, view, page, userLivesInMoscow) // assertion used

断言是传递给用户的对象。它有一个检查断言是否满足的方法:

代码语言:javascript
复制
interface Assertion
 bool public function assert()

class UserLivesIn implements Assertion
 public function UserLivesIn(User, City) ...
 // implementation of assert method comes here

这是实现所需内容的一种方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2839797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档