大佬教程收集整理的这篇文章主要介绍了php – 大型网站如何完成行级权限?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
对于具有动态内容的大型网站,我认为这可能是处理它的最佳方式.
例:
好吧,假设我们有一个简单的文件存储站点,用户只能访问他们的数据或其他用户明确共享的数据.
由于这个应用程序非常简单,因为它只提供文件,因此它只有三个数据库表:
Users Table which has columns: UserId <int> PK UserName <varchar> HashedPassword <varchar> Files Table which has columns: FileId <int> PK FileOwnerId <int> FK (this has a foreign key relationship with UserId in the users table) FileName <varchar> MimeType <varchar> FileData <blob> SharedFile reference table which has columns: SharedFileIndex <int> PK FileId <int> FK UserId <int> FK
现在,我们要在数据访问层中定义的一些基本规则是,当用户登录时,他们可以访问他们是其所有者的文件以及其他用户与他们共享的文件.因此,无论是通过存储过程还是构建查询以发送到数据库服务器,我都会确保我的查询只返回他们有权访问的记录.
这里是用户登录时的基本GetUsersFileList SQL查询:
SELECT FileId,FileName,FileType FROM Files WHERE FileOwnerId = @UserId
正如您在此处所见,我们使用参数化查询来获取用户所属的文件.此外,我们还将查询共享文件以及向用户显示.
现在,如果我们假设每个文件都有自己独特的URL,例如:
http://mydomain.com/filehandler.PHP?fileId=123546
然后,当我们尝试获取文件时,我们使用与上面类似的查询来尝试获取文件数据:
SELECT FileName,FileType,FileData FROM Files LEFT OUTER JOIN SharedFiles on Files.FileId = SharedFiles.FileId WHERE Files.FileId = @FileId AND (FileOwnerId = @UserId OR SharedFiles.UserId = @UserId)
因此,我们仍然在查询中使用UserId,因此,如果用户没有与他们共享文件,或者他们不是文件的所有者,则查询结果将为0行.
因此,权限取决于用户在数据库中映射到的内容,但实际执行是通过在提供内容之前在业务逻辑层中仔细编写数据访问代码和/或其他检查来完成的.
EDIT2:我最熟悉MSsql,所以我上面的查询都是在T-sql中,所以MysqL的语法可能有些偏差.
EDIT3:用数据访问层替换了业务逻辑层,如本例中所做的唯一检查是在数据访问查询本身内.
EDIT4:Ok回过头参考业务逻辑层,因为更复杂的应用需要更复杂的权限方案,这可能需要在业务逻辑层进行额外的检查.
以上是大佬教程为你收集整理的php – 大型网站如何完成行级权限?全部内容,希望文章能够帮你解决php – 大型网站如何完成行级权限?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。