设计应用程序的最佳方式

时间:2011-06-08 12:21:28

标签: design-patterns software-design application-design

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

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

角色:admin,版主,作者 资源:文章

我看到两个选项。

1:为每个角色创建单独的模块,并为该角色提供对资源的访问权限   例如:         管理员/                - 添加/编辑/删除文章               -add / edit / delete user        作者/               -add / edit / delete自己的文章        主持人/                - 编辑文章

2:为每个资源创建单独的模块,并根据访问它们的用户的角色授予它们访问权限。    例如:
          articles / add / edit / delete [根据用户的角色管理操作]

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

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

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

感谢。

2 个答案:

答案 0 :(得分:0)

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

这个答案适用于.NET。

什么都不做。使用内置安全模型(CAS =代码访问安全性)。

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

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

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

答案 1 :(得分:0)

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

在您的示例中,这意味着如果文章只想由指定的用户进行编辑,那么该文章的业务是检查谁编辑它。

所有的逻辑都是这样的:

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

如果您想要添加新用户角色或更改现有角色的行为,您只需编辑这一条件而不是创建另一个非常相同但又有点不同的用户模块。