0

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

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

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

我看到两个选项。

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

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

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

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

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

谢谢。

4

2 回答 2

0

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

此答案适用于 .NET。

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

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

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

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

于 2011-06-08T12:34:38.340 回答
0

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

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

所有的逻辑都是这样的:

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

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

于 2011-06-08T13:22:19.803 回答