使用PHP从MySQL数据库访问某些数据的用户权限?

时间:2016-07-06 05:35:50

标签: php mysql

我有这个简单的MySQL表,我称之为data_table

/--------------+------------------+-------------------\
+    data_id   +   data_content   +  addition_content |
+--------------+------------------+-------------------+
+    data_1    +  data_content_1  +   comment_for_1   |
+    data_2    +  data_content_2  +   comment_for_2   |
+    data_3    +  data_content_3  +   comment_for_3   |
+              +                  +                   |
+     ...      +       ...        +         ...       |
+              +                  +                   |
+    data_n    +  data_content_n  +   comment_for_n   |
\--------+-----+------------------+-------------------/

为了帮助用户将数据提交到我的数据库,我创建了一个简单的HTML表单(使用PHP核心),以便更轻松地提交数据。

为了从此表格中获取数据(data_table),我使用了此查询(来自my_query.php):

// ...

$var_get = $_GET['url'];

$query_1 = mysql_query("SELECT * FROM `MyDB` WHERE `data_id` = '{$var_get}'");

while ($query_2 = mysql_fetch_array($query_1)) 

{

    echo $query_2['x_2'];


}

// ...

任何人在访问echo $query_2['x_2'];my_query.php时都可以看到任何结果(来自$_GET[];}。

现在,我不想让所有人都能访问我网站上的任何数据。因此,我决定仅允许某些用户访问权限;而且,我有一个想法:

  • 我将创建一个新的MySQL表(user_table):
/--------------+------------------+-------------------\
+    user_id   +     user_name    +   user_password   |
+--------------+------------------+-------------------+
+    user_1    +    user_name_1   +     password_1    |
+    user_2    +    user_name_2   +     password_2    |
+    user_3    +    user_name_3   +     password_3    |
+              +                  +                   |
+     ...      +       ...        +         ...       |
+              +                  +                   |
+    user_n    +    user_name_n   +     password_n    |
\--------+-----+------------------+-------------------/
  • 然后,我将新数据列(data_owner)添加到现有表(data_table)。每条记录(数据行)都有一个所有者;此所有者是将我们的数据提交到我的网站的现有用户(user_table)。
  • 最后,我将新数据列(allowed_user)添加到现有表(data_table)。每条记录(数据行)都有一些允许的用户;这些允许的用户是允许查看结果的现有用户(user_table)(来自echo $query_2['x_2'];)。如果某人不是允许的用户(来自某个记录),他们将无法看到真实数据。

我的想法还不错?

对不起,编程不是我的工作;所以,我的编程技巧有一些限制。你能举个例子吗?

3 个答案:

答案 0 :(得分:1)

您所描述的是用户的基本登录/身份验证系统。 https://www.phpro.org/tutorials/Basic-Login-Authentication-with-PHP-and-MySQL.html

有了这个,只允许用户更新自己的记录。

如果您想要管理员用户或版主,可以设置一个简单的访问控制列表。 例如:

CREATE TABLE levels(
  id int not null primary key auto_increment'
  name varchar(20) not null
);
INSERT INTO levels(id, name) values (1,'admin');
INSERT INTO levels(id, name) values (2, 'moderator');
INSERT INTO levels(id, name) values (3, 'guest');

当用户登录时,您可以检查他们是否拥有版主或管理员权限以查看其他用户数据。

如果您希望使用现有解决方案,还可以使用ACL实现。

千电子伏

答案 1 :(得分:0)

您需要再创建一个名为role的字段 例如:user_id,user_name,user_password,user_role

注册时你需要传递角色类型(admin,superadmin(可选),发布者,访客),你可以在角色中添加你需要的任何东西。

根据您需要授予的角色。

答案 2 :(得分:0)

不,我不这么认为!您的想法不是问题的best fix

您真正需要的是访问控制列表,就像Kevin Waterson said

一样

我不建议你实现自己的ACL。您可以在GitHub上查看这个ACL Library,它是最好的PHP库之一,它没有太多的学习曲线(如果它有任何学习曲线) )它只是有效。

如果您使用我上面链接的Samshal\Acl库,以下代码段将帮助您保护资源:

        $permissionManager = new \Samshal\Acl(); #<-- Instantiate the ACL Class

        #When you create a new data, add it to your ACL by doing
        $permissionManager->addResource('data_1'); #<- data_1 is the id of your newly created data

        #You need to also register users to the ACL
        $permissionManager->addRole('user_n'); #<- user_n is the id (probably the username) of your just created user

        #Then grant permissions by doing:
        $permissionManager->user_n->can->view('data_1');
        #Or deny permissions by doing
        $permissionManager->user_n->cannot->view('data_1');

序列化的$permissionManager 保存在数据库或文件中,瞧!您已成功保护每个资源。

图书馆还有其他很酷的功能,例如允许您授予editcreatedelete,甚至允许您创建和附加完全自定义权限,例如approveDataContent对资源的权限。 您可以访问https://github.com/Samshal/Acl/blob/master/README.md以了解有关ACL库的更多信息