【发布时间】:2017-06-08 16:06:02
【问题描述】:
是否应该在读取/写入实际数据之前执行用户对数据库中记录的读取/写入检查?或者可以在同一个查询中应用所有这些吗?
即。
assertUserCanViewClassRoom($classroomId, $userId, $userRole);
assertUserCanRemoveStudent($classroomId, $userId, $userRole);
还是应该在action的sql中完成检查?
viewClassRoom($classroomId, $userId, $userRole);
removeStudent($classroomId, $userId, $userRole);
我太啰嗦(又名罗嗦)
现在我要修改所有查询,只是为了确保允许执行操作的用户这样做,用户可以访问表 B 中他们可能创建的或他们的角色允许他们执行的读取/更新记录忽略属于较小用户(又名管理员、教师、学生)的记录
目前该过程允许任何用户修改记录(可怕的做法)。老师 A 可以查看老师 B 的信息,并通过在课堂上添加/删除学生来修改它。理想情况下,简单检查一下教师的 id 就可以防止这种行为发生。
我是否应该在访问该记录之前进行检查,以验证 X 老师是否有权在表 B 中记录 id=Y。这听起来不错,但真的如此吗?我做的工作是先检查而不是读/写数据吗?
我认为这将是一个简单的查询语句更改,它根据用户 ID 或 用户角色权限 将表加入 到记录正在修改。
有人建议我做一个听起来不错的预检查,但现在我可能会为数据库增加额外的流量,以完成我认为是简单的读取或写入事务。我将其视为断言或通过 sql 检查以验证用户是否可以执行任务而不是执行它。
这是断言/权限检查的标准做法吗?先检查一下是否有一个简单的更新、插入或删除功能? (请注意,Delete 从未真正使用过)如果不是这种情况,那么更好的建议是什么?
附加信息 系统设置为用户当前可以读取自己的数据,但通过一些简单的修改,用户实际上可以读取任何人的数据。
项目是 PHP 与 MySQL 后端所有面向对象
【问题讨论】:
标签: php sql permissions privileges user-roles