0

我有四种不同类型的用户登录到我的网站,例如adminsuperadmincompanyemployees。他们每个人都有不同的页面集可供查看,但也有一些常见的页面。现在我有四个不同的表来管理它们,它们具有相同的登录屏幕adminsuperadmin. 当任何一个adminsuperadmin登录时,我将在授予访问权限之前一一检查两个表。我有一个单独的登录屏幕companyemployees. 这是公认的做法吗?

实际上,我希望将其更改为包含所有用户的单个表和一个角色表以区分角色。我相信四张桌子的概念真的很糟糕。我不能简单地把它放在一张桌子上,因为以前的开发人员习惯于将用户评论和用户活动保存在网站上使用的文本文件中。

我是否正确地认为四表登录系统不好?将日志存储在直接在网站中使用的文本文件中是否是一个好主意?

4

3 回答 3

5

你有4张桌子?只需使用一个用户表和一个可以是“admin”、“superadmin”、“company”或“employees”的字段。然后,您可以拥有无​​限类型的帐户。(我会使用 1、2、3 或 4 之类的数字代码,而不是字符串代码或ENUM类型字段)。

但是,是的,你的单桌想法很好。如果您想要一个角色表,请对您的角色字段执行外键并将其链接到您的角色表。您也可以有一个登录,而不是为不同的用户使用不同的登录,并根据该外键值检查权限。

于 2012-08-17T00:19:58.217 回答
4

这是我的建议,

与其为您的用户使用四个表,不如使用一个

您可以像这样创建基本用户表(将排名更改为适合您的站点/脚本):

ID username password email bla bla bla rank

因此,您可以让 PHP 脚本检查用户是否具有所需的访问级别,而不是使用四个表。

这是一个保护页面免受访问级别较低的用户访问的简单功能:

function required_level($level){
    $user_level = mysql_return(mysql_query("SELECT $rank FROM `Accounts` WHERE `user_id` =  $user_id"));
    if($user_level<$level){
        header("Location:index.php");
    }
}

然后在每个页面上,您要防止较低级别的用户访问它。您只需拨打电话required_level(4);,该页面将只允许具有此级别或更高级别的用户访问该页面。

例子:

  • Bob 是一名员工,因此他的用户等级为 1,
  • Joe 是超级管理员,因此他的用户等级为 4

两个用户都正常登录,并且都尝试访问admin.php.

admin.php 以 required_level(4) 开头;所以 Bob 将被重定向到主页(您也可以传递一个错误)但是,Joe 将无法访问此页面,因为他的排名与访问此页面所需的排名相同或更高。

So, here's my super long explanation on what you can do! I hope this helps and gives you some ideas on how to make your user tables better and easier to create protect pages :)

于 2012-08-17T00:40:50.717 回答
2

首先,你可以用一张桌子做所有的事情。在该表中,您应该具有用户名、密码、用户类型和其他必要信息等字段。

检索用户信息,例如:

$username = $_POST['username'];  //Retrieving a username from HTML login form
$row = mysql_query(sprintf("SELECT * FROM table WHERE username ='%s'", mysql_real_escape_string($username)));  //Retrieving a row from the database
$res = mysql_fetch_array($row);
$type = $row['typeofuser']; //Retrieving whether it is administrator, super administrator, user, etc.
if ($type == "admin")
    header(Loction:adminpge);

同样,您可以检查任何类型的用户并可以重定向到另一个页面。

于 2012-08-17T00:26:26.510 回答