最后几天我想知道它是如何完成的?如何验证/授权用户可以通过AJAX请求数据。
目前我正在使用SESSIONS进行身份验证。但这只是一个小保护。
假设我有一些名为addUserToGroup($ user_id,$ group_id)的函数,通过
调用EXAMPLE: www.mysite.com/addUserToGroup/1/2 ( user_id = 1 , group_id = 2 )
如何检查此用户是否真的被允许加入group_id = 2?每个人都可以将数据发布到我的服务器......
我找到的一个解决方案是使用jcryption(公钥/私钥方法)。但我认为,必须有一种更简单的方法来检查user_id = 1是否允许加入group_id = 2.
提前致谢!
答案 0 :(得分:2)
向表用户添加一个额外字段:is_allowed_to_join_2 int(1)
当此人登录时,请设置
$_SESSION['is_allowed_to_join_2'] = $user['is_allowed_to_join_2'] == 1 ? true : false;
在ajax调用中,在你的php代码中:
if( $_SESSION['is_allowed_to_join_2'] !== true )
{
exit("Not allowed");
}
答案 1 :(得分:1)
如何验证/授权用户可以通过AJAX请求数据。
与auth / authz任何其他HTTP请求的方式相同。
或者现在我正在使用SESSIONS进行身份验证。
会话是一种明智的方式来跟踪用户是否已登录,以及他们以何种方式登录。
如何检查此用户是否真的被允许加入group_id = 2?
会话数据会告诉您该用户是谁。
最重要的是,您实施业务逻辑以确定是否允许他们加入第2组。我们无法告诉您这是什么,因为我们不知道业务逻辑是什么。
例如,如果只允许区域2国家/地区的用户加入第2组,则您的逻辑可能类似于:
IF session exists
AND user is logged in
AND user's country is in region 2
THEN authorized
确定用户的国家/地区是否在区域2中可能会使用某些SQL来完成
SELECT user_id FROM members, countries WHERE user=:username AND members.country=countries.id AND countries.region=:region
答案 2 :(得分:1)
我相信你的问题是关于授权,而不是身份验证。如果我是对的,那么大概你已经知道用户(身份验证,可能使用cookie或其他东西)。
现在,你必须想出一种方法来确定他们可以做什么(授权)。
授权逻辑确实是一个关键的设计决策。因此,它非常重要,并且在很大程度上取决于数据模型的形状和应用程序的体系结构。
如果您可以通过对数据应用规则来持续确定是否允许这样做,例如在Quentin上面的响应中(生活在区域2中足以使用户可以加入第2组),那么通常最简单的把这个逻辑放在你的实体模型中。在这种情况下,我要么在User上创建一个方法来检查他们是否可以加入该组......
function canJoinGroup($group) {
//if(all is well), then:
return true
}
或者创建一个加入它们的方法,如果不允许则抛出错误:
function joinGroup($group) {
//if(all is well), then:
return true;
//otherwise:
throw new Exception("User ". $this->id ." cannot join group " . $group->id);
}
您还可以向Group添加一个功能,该功能委派给这个新的用户功能:
function addUser($user) {
$user->joinGroup($this);
}
OTOH,如果关于谁可以做什么基于更细粒度的权限,或者基于管理员或用户需要能够在运行时更改的信息的决定,那么你将不得不获得更多的发现。一种常用的,通用的,灵活的方法称为Role-Based Access Control(又称RBAC)。
这可能会非常复杂,但适用于您的案例的核心概念是您拥有用户,实体(组)和操作(加入)。您需要确定是否允许用户1以组2作为参数执行名为“join”的操作。
为了做到这一点,你必须在某处保留一套规则,然后做两件事:
我不会深入了解此用例的低级细节。我只想说,如果你今天要完成的任务最终需要发展成一个相当复杂的权限系统,那么你最好先研究一下RBAC。