我有这个简单的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[];
}。
现在,我不想让所有人都能访问我网站上的任何数据。因此,我决定仅允许某些用户访问权限;而且,我有一个想法:
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'];
)。如果某人不是允许的用户(来自某个记录),他们将无法看到真实数据。我的想法还不错?
对不起,编程不是我的工作;所以,我的编程技巧有一些限制。你能举个例子吗?
答案 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
保存在数据库或文件中,瞧!您已成功保护每个资源。
图书馆还有其他很酷的功能,例如允许您授予edit
,create
,delete
,甚至允许您创建和附加完全自定义权限,例如approveDataContent
对资源的权限。
您可以访问https://github.com/Samshal/Acl/blob/master/README.md以了解有关ACL库的更多信息