2011-06-08 53 views
0

我有一个具有不同角色的多个用户的应用程序。 每个用户对资源的访问都受到他所具有的角色的限制。设计应用程序的最佳方式

现在,如果我正在构建一个应用程序来管理这些资源,我应该如何构建我的应用程序。

角色:管理员,版主,笔者 资源:文章

我看到两个选项。

1: 管理员/ -add /编辑/删除文章 -add /编辑/删除用户 撰文/ -add /编辑:用于提供访问每个角色对资源的作用 如建立独立的模块/删除自己的文章 版主/ - 编辑文章

2:为每个资源创建单独的模块并根据访问它们的用户的角色给予访问权限。 如:
文章/添加/编辑/删除[管理根据用户的角色操作]

的语言是PHP,我将使用Zend框架。我的问题不是关于访问权限,因为Zend的ACL组件负责处理它。我的问题是组织应用程序。

例如,如果引入了新用户,在第一种情况下,我将不得不创建一个新模块。但在第二种方法的情况下,我将不得不更新每个模块。

很明显,第一种方法会涉及更多的文件和更复杂的逻辑 第二种方法将需要更复杂的逻辑,但我不确定要跟随哪一个并寻找建议。任何帮助表示赞赏。

谢谢。

回答

0

我认为一般的做法是保持访问逻辑与访问资源,而不是访问一个。

在你的例子中,这意味着如果文章只想被指定的用户编辑,那么它是文章的业务,以检查谁编辑它。

所有的逻辑是这样的:

if user is article.owner or admin 
    ...make things happen 

,如果你想添加新的用户角色或者改变现有的行为,您只需要编辑这一个条件,而不是漂亮的创建另一个很多同一个又一个不同的用户模块。

+0

你是绝对正确的。非常感谢。 – Rajesh 2011-06-09 06:59:43

0

这实际上取决于您在哪种语言/平台中构建所有内容。大多数平台已经构建了对安全性的支持。

此答案适用于.NET。

没什么特别的。使用内置的安全模型(CAS =代码访问安全性)。

您可以通过使用某些属性来限制对方法的访问。如果您正在构建MVC应用程序,则可以使用[Authorize]属性,而在常规应用程序中,您可以使用[PrinicpalPermission]

为了让它工作,您需要为所有正在运行的线程分配一个主体(System.Threading.Thread.CurrentPrincipal = new MyPrincipal(myUserInfo))。

ASP.NET自动执行此操作,并且其他应用程序将当前登录(Windows)用户用作默认值。

相关问题