PHP用户认证逻辑

3
我正在尝试理解如何设置正确的逻辑来实现我的目标。我想要一个网站,根据用户类型/类别提供特定的URL访问权限。因此,如果用户A订阅了1、2、3号URL,则他不应该能够访问用户B订阅的4、5、6号URL。
我可以轻松地编写一些代码,在填充一系列链接之前检查用户是否已登录,但我不希望这些链接与其他用户共享。
我考虑使用mysql查询来选择与用户匹配特定组或类型的内容,并将此查询放入每个页面中,以便在加载内容之前检查数据库,确保正确的用户获得访问权限。
我想知道的是:1. 这是正确的方法吗?2. 我应该如何构建我的数据库结构?我应该让每个页面(或特定类型的内容)成为自己的表格,并在注册时将用户输入到该表格中吗?还是有其他更好的逻辑和性能方面的结构方式?
2个回答

2
您正在使用用户组的正确路径。每次用户加载页面时进行选择会降低性能,但这里有一个我曾经使用过类似东西的解决方案。
首先创建一个表来保存用户组(以防您以后需要添加组),然后向您的用户表添加索引以引用每个用户的组。
然后在登录查询中选择用户组的ID以及用户和密码,并像处理其他两个字段一样将其存储到$_SESSION变量中,我们称其为$_SESSION ['groupid'] 然后在您要显示正确链接的页面上混合php和html。这部分取决于您有多少组,如果它们很少(例如管理员,版主,用户),那么这应该可以做到:
<yourhtml pre-links>
<? if($_SESSION['groupid']==1)
{
echo "link 1" //formated html links goes here, maybe pre-stored links
}
elseif ($_SESSION['groupid']==2)
{
echo "link 2"
echo "link 3"
}
elseif ($_SESSION['groupid']==3)
{
echo "link 3"
echo "link 1"
}
?>
<yourhtml post-links>

希望这可以帮助您,不知道是否符合您的实际需求,但这样可以在无需更改页面或任何其他操作的情况下向他们展示。

2
我会进一步检查每个页面,以确定当前用户是否有权访问它。例如,在pageforgroup1.php的顶部进行检查,看看$_SESSION ['groupid']是否实际上等于1。这将防止用户通过简单地键入URL来访问页面。 - Bjorn Smeets
我唯一不确定的是如何将多个组引用到一个用户?我需要多次输入相同的用户ID,但每次引用不同的组吗? - maestro416
这有点两者兼而有之。基本上它将是一个访问辅导视频的网站。一些人可能会订阅数学和科学视频,而其他人只订阅生物学视频,例如。我需要能够根据订阅类型加载链接/内容。有什么想法? - maestro416
1
你应该考虑你将有多少组。如果它们很少,你可以在用户表中添加类似布尔字段的字段,每个字段对应你想让他们查看的一个部分。否则,你可以在单个字段上管理数据库中的特权存储,然后将其拆分。如果你不知道这个函数,请查看这个链接:http://php.net/manual/es/function.explode.php - Gonzalo Acosta
这正是我所说的,我很高兴你理解了。问题是,如果有许多课程,请使用explode,如果只有几个(比如说不超过10个),只需创建一些布尔型字段将更容易,并且不会给您带来性能问题。 - Gonzalo Acosta
显示剩余3条评论

0

我在这方面的知识不足。如果我是你,

我会创建一个带有链接的表格

表格链接

 link_id   link
   1       abc.php
   2       cde.php
   3       efg.php

并将 user_details 设为

 user_id username   password 
    1     login1   login_pass
    2     login2   login_pass2

还有一个定义用户链接的表:

user_links

  id  user_id  link_id 
   1     1       1
   2     1       2 
   3     2       3 

从这些表中,使用连接操作,我将获取登录1用户链接abc.php和cde.php。
同样的方式,您可以映射所有其他链接。
为了检查用户权限,您可以编写一个函数来检查所选路径是否已与已登录用户(用户ID可以存储在会话中)映射。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接