【问题标题】:Best way to design application设计应用程序的最佳方式
【发布时间】:2011-09-10 20:08:29
【问题描述】:

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

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

角色:管理员、版主、作者 资源:文章

我看到了两个选项。

1:为每个角色创建单独的模块,并授予该角色访问资源的权限 例如: 行政/ -添加/编辑/删除文章 -添加/编辑/删除用户 作者/ -添加/编辑/删除自己的文章 主持人/ - 编辑文章

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

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    此答案适用于 .NET。

    什么都不做。使用内置的安全模型(CAS = Code Access Security)。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      所有的逻辑都是这样的:

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

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

      【讨论】:

        猜你喜欢
        • 2018-01-21
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        • 2014-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多