2009-07-13 25 views
1

我与之合作的网站在处理用户和权限方面有点复杂。如何构建具有多个权限级别的多个用户?

这些用户类型:

  • 用户
  • 基金审批
  • 基金管理
  • 企业审批
  • 企业联系

现在也有设施,及这就是这些权限级别进入的地方玩。设备链接到用户和用户级别的表像这样:

user_id  facility_id  userlevel 
joebob  ABCInc   Facility Admin 

到目前为止很简单,但现在我想的是能够允许一个用户级别上设置另一个用户等级限制一定设施。例如,我是Facility Admin,我只想让用户提交某些表单。我将如何存储这个?

我在想一个链接facility_id,userlevel和permissionlevel的新表。但是,权限级别究竟是什么?一个int?或者,我会像canOrderThings或canSearchForStuff那样向表中添加列?

我看到如果像this可以工作,但它似乎会有点混乱,难以跟踪,如果你有大量的权限。你会如何添加权限级别而不会把所有的东西都扔掉?甚至设置权限级别会让我觉得有些挑战。

另外用户级别直接与用户表中的用户关联,但这些服务器的用途不同。

有没有更好的方法来构造所有这些?

回答

2

对于选项使用第二个表是个好主意。一些论坛框架使用这种方法。
您的每个用户都会得到一个UserGroupId,这通常是一个Int,因为他们最容易处理。例如UserGroupId,可以是管理员,2可以是教师(取决于你的组织)。

然后你有一张名为Permissions的表,在这张表上你包括了所有的选项列,就像这样。

UserGroupID --|-- SearchEnabled --|-- CanOrder 
      1     0   1 
      2     1   1 

使用一个简单的二进制系统,1启用,0禁用,您可以控制每个用户组的选项。这使您可以通过单个查询获取所有权限,同时仍可提供非常大的自定义区域。

尽管您不必使用二进制数字。例如,您可以使用值1,2,3,其中1是完全许可,2是部分的,3是零。这取决于你的规定如何具体。

现在,在您允许用户执行选项之前,您需要对用户权限(应该存储在数组或类中以便快速访问)进行简单检查。为了使搜索你会使用的条件,如

If ($user['SearchEnabled') 
{ 
    $generate->SearchOptions(); 
} 
else 
{ 
    $generate->Error('NoSearchPermissions'); 
} 

使用二进制数的函数具有简单的显而易见的好处是否TRUE或FALSE。如果您使用的是不同的编号系统,它需要更多的工作,检查的具体价值
If ($user['SearchEnabled'] == 2 || $user['SearchEnabled'] == 1)

+0

[+1]你打我吧!很高兴看到这是做事的好方法。 – EvilChookie 2009-07-13 23:37:37

0

好吧,如果我想实现我的应用程序的权限,我可以这样做3种方式(我能想到的对我的头顶上):

  1. 在用户表(和记录,如果你使用orm)把一个级别int。因此,例如,1级用户只能查看表单,2级可以发布,3级是admin并且可以编辑等。然后,在视图中,您只需检查用户是什么级别并回显表单即可编辑等(根据您的问题,我想这是你已经做什么)

    优点:

    • 易于设置
    • 让您组权限在一起。

    缺点:

    • 如果您需要1和2之间的水平,你必须做大量的工作。所以,后来增加水平很难。
  2. 加入用户表的权限表。基本上其他回答者在这个线程中描述的是什么。

    优点:

    • 您并不仅限于水平,可以在两者之间,你想添加尽可能多的水平。
    • 您可以微调每个用户能够做什么。

    缺点:

    • 您不能组的权限,但我想你可以只给它们一次全部,如果你想要的。
    • 告诉用户他/她有什么更多的工作,因为你只能列出所有的权限,或者做一个大规模的切换来确定他们是否是管理员。 (例:我是一个普通用户以及我可以编辑的形式,而不是搜索?)
  3. 结合这些,所以基本上在user表中你可以有一个字符串,它有值分别为“管理员”,并在每个页面上看看他们是否是管理员。

    优点:

    • ,只要你想,没有抛出任何不WAK的您可以添加多次。像“超级管理员”或“少了几分管理员”

    缺点类型:

    • 如果你是微调每一个用户,你最终会得到很多新的用户类型的快。
    • 添加新的用户类型字符串可能比较困难,除非用户类型字符串表被连接到表权限,但现在我们变得非常复杂。
+0

您对权限表的用户做出了错误的假设。您可以通过在一个选项下设置多个权限来分组权限。如果需要,CanSearch可以控制10个子函数,这取决于您如何定义每个子类别的使用。很容易告诉用户他们基于** UserGroupId **,我是管理员或教师或学生等。 – 2009-07-14 00:05:50

相关问题