用户故事:
我是网络应用程序的管理员,我需要删除该网络应用程序的其他用户。我从用户列表中选择用户,然后可以从后续页面中删除用户。
当前(错误)解决方案:
现在我将用户即将删除的ID /主键存储在隐藏的表单元素中(可怕,可怕,可怕,我知道 - 有人可以使用元素检查器删除任何用户......)。对于这样的事情,最好的做法是什么?我是否将要删除的用户的ID /主键保存为$ _SESSION变量?一块饼干?一个哈希的URL并用$ _GET?
抓住它修改
有不同的用户组,由不同的管理员管理。 A组的管理员不了解B组(及其用户)等。所有用户都在一个表中,所有用户可以在任意数量的组中。我需要保护用户的ID并远离DOM,以便有人无法改变它并删除他们没有管辖权的用户。
答案 0 :(得分:1)
没有必要使用$_SESSION
来完成这样的任务:会话用于维护页面之间的状态,这里没有这样的情况。
处理资源[例如用户]时的最佳做法是设置RESTful environment。
虽然您还没有设置此类系统,但您仍然可以利用$_GET
和$_POST
php数组的HTTP请求:
<form action="delete.php" method ="post">
<select id="user" name="user">
<option value="1">Joh Doe</option>
<option value="2">Jane Doe</option>
<option value="3">Dun No</option>
</select>
<input type="submit" value="Submit"/>
</form>
当您提交此表单时,您向POST
发出delete.php
个请求,$_POST
数组将包含一个具有所选值的user
个键 - 然后您就可以删除用户通过这样的密钥,使用PDO编写的语句。
反对拒绝删除权限,你必须设置脚本以阻止请求,如果记录的用户没有足够的权限 - 这是你必须正确设置的另一层,所以我建议你使用框架[如{{ 3}}或YII]因此您可以利用其安全组件。
隐藏的领域想法落后于Symfony,所以它根本没有意义 - 是的,它依赖于会话。
答案 1 :(得分:1)
我只是确保在删除用户时验证用户权限。
写作例如很好函数isUser()用于检查会话/ cookie中的数据,如果您被置入,则返回true,然后您也可以访问var,表明您作为用户的权限。此外,当您检查数据是否正常并且您实际上已使用正确的数据登录时,您可以生成$ user_rights var,其中包含站点访问级别(等)。
然后简单地说:
if(isUser() and $user_rights == 9) { /* code here, 9 is e.g. admin right */ }
答案 2 :(得分:0)
会话没有错。会话用于临时存储在1页以上。