我正在使用的网站在处理用户和权限方面有一些令人费解的方式。
以下是用户类型:
现在还有设施,这就是这些权限级别发挥作用的地方。设施与表格中的用户和用户级别相关联:
user_id facility_id userlevel
joebob ABCInc Facility Admin
到目前为止非常简单,但现在我想要的是能够允许一个用户级别为某个设施设置另一个用户级别的限制。例如,我是Facility Admin,我想只允许用户提交某些表单。我该如何储存?
我在想一个链接facility_id,userlevel和permissionlevel的新表。但究竟什么是权限级别呢?一个int?或者我会像canOrderThings或canSearchForStuff一样向表中添加列?
我看到了this是否会起作用,但如果您拥有大量权限,它似乎会变得有点混乱而难以跟踪。如何在不丢弃任何东西的情况下添加权限级别?或者甚至设置权限级别我认为会有点挑战。
用户级别也直接链接到用户表中的用户,但这些服务器的用途不同。
是否有更好的方法来构建所有这些?
答案 0 :(得分:2)
使用第二个表格作为选项是一个好主意。一些论坛框架使用这种方法
您的每个用户都被赋予UserGroupId
,这通常是一个Int,因为它们最容易使用。例如,UserGroupId
为1,可以是管理员,2可以是教师(取决于您的组织)。
然后你有一个名为Permissions的表,在这个表上你包括所有选项作为Columns,就像这样。
UserGroupID --|-- SearchEnabled --|-- CanOrder
1 0 1
2 1 1
使用简单的二进制系统,1启用,0禁用,您可以控制每个用户组的选项。这允许您通过单个查询获得所有权限,同时仍然提供非常大的自定义区域。
您不必使用二进制数字。例如,您可以使用值1,2,3,其中1表示完全权限,2表示部分权限,3表示0。这取决于您的法规需要具体的具体程度。
现在,在允许用户执行选项之前,您需要对用户权限进行简单检查(您应该将其存储在数组或类中以便快速访问)。对于启用搜索的功能,您将使用诸如
之类的条件If ($user['SearchEnabled')
{
$generate->SearchOptions();
}
else
{
$generate->Error('NoSearchPermissions');
}
使用二进制数具有明显的好处,只需检查是否为TRUE或FALSE。如果您使用不同的编号系统,则需要更多工作,检查具体值
If ($user['SearchEnabled'] == 2 || $user['SearchEnabled'] == 1)
答案 1 :(得分:0)
好吧,如果我想在我的应用程序中实现权限,我可以通过3种方式实现这一点(我可以想到最重要的):
在users表上(如果你正在使用orm,则记录)放一个级别int。例如,1级用户只能查看表单,2级可以发布,3级是管理员,可以编辑等等。然后在视图中,您只需检查用户是什么级别并回显表单,他们可以编辑等(根据你的问题,我认为这就是你已经在做的事情)
优点:
缺点:
使用users表加入权限表。基本上是另一个回答者在这个帖子中描述的内容。
优点:
缺点:
结合使用这些,所以基本上在用户表上你可以有一个字符串,其值为“admin”,并且在每个页面上只显示他们是否是管理员。
优点:
缺点: