0

0

PHP怎样获取栏目访问权限_PHP判栏目权限方法【鉴权】

星夢妙者

星夢妙者

发布时间:2026-02-05 11:01:35

|

135人浏览过

|

来源于php中文网

原创

PHP栏目权限校验需严格类型匹配、预处理防注入、支持继承与缓存,推荐Laravel Gate/Policy;易漏点:API未校验栏目权限、前端渲染与后端查询脱节、用户维度缓存未分离。

php怎样获取栏目访问权限_php判栏目权限方法【鉴权】

PHP中用 in_array() 判断用户栏目权限是否生效

最常用也最容易出错的方式,是把用户拥有的栏目 ID 列表(比如从数据库查出的 $userAllowedCats)和当前请求的栏目 ID($currentCatId)做简单比对。但要注意:这个数组必须是纯整型或严格字符串类型,否则 in_array('5', [5, 10], true) 会返回 false

实操建议:

  • 从数据库读取权限时统一用 array_map('intval', $rawIds) 转成整型数组
  • 判断前先检查 $userAllowedCats 是否为数组且非空,避免 Warning
  • 不要依赖 session 中未校验的原始数据,每次鉴权前应重新加载或验证缓存有效性

基于 RBAC 模型查 category_permission 关联表做动态鉴权

当栏目权限支持「角色-栏目-操作」三级控制(如编辑/查看/删除),就不能只靠 ID 列表硬匹配。典型做法是拼接 SQL 查询关联表,例如:

SELECT COUNT(*) FROM category_permission 
WHERE role_id = ? AND cat_id = ? AND action = 'view'

关键点:

立即学习PHP免费学习笔记(深入)”;

剪小映
剪小映

记录美好智能成片,AI智能视频剪辑

下载
  • 参数必须用 PDO 预处理,禁止字符串拼接 $catId,防止越权访问(比如传入 1 OR 1=1
  • 如果栏目有继承关系(子栏目自动继承父级权限),需额外递归查询祖先节点,不能只查当前 cat_id
  • 高频访问场景下,建议将结果缓存到 Redis,key 可设为 perm:role_{$roleId}:cat_{$catId}:view

用 Laravel 的 can() 方法配合策略类控制栏目访问

如果你项目已用 Laravel,别重复造轮子。Laravel 自带的 Gate 和 Policy 能自然对接栏目模型。比如定义 CategoryPolicyview() 方法:

public function view(User $user, Category $category): bool
{
    return $user->hasRole('admin') || 
           in_array($category->id, $user->allowed_category_ids);
}

调用时直接写 $user->can('view', $category) 即可。注意:

  • 确保 $category 是 Eloquent 模型实例,不是裸数组或 ID;否则 Policy 不会触发
  • 若权限逻辑复杂(如按用户组+时间+IP 多维限制),Policy 方法里别写死,抽成独立服务类注入
  • 中间件里调用 can() 前,务必确认 $category 已通过路由模型绑定或手动查出,否则抛 ModelNotFoundException

绕过权限校验导致的越权漏洞常见位置

很多线上问题不是逻辑写错,而是漏校验。以下三处最容易被忽略:

  • API 接口里只校验了「用户是否登录」,但没校验「能否访问该栏目」,尤其 POST/PUT 接口常被跳过
  • 前端渲染菜单时用了权限数据,但后端接口仍按 ID 直接查记录,没二次校验所属栏目是否在授权范围内
  • 使用缓存时,把整个栏目页 HTML 缓存了,但不同用户看到的内容本应不同——这种缓存必须按用户 ID + 栏目 ID 组合键分离

权限不是加一层 if 就完事,它得贯穿请求生命周期:路由层拦截、控制器里显式调用、视图中动态渲染、缓存键设计也要参与。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

322

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

282

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

456

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

375

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

106

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

72

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

68

2025.08.05

数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

833

2023.10.12

Python 数据库优化与性能调优
Python 数据库优化与性能调优

本专题专注讲解 Python 在数据库性能优化中的应用,包括数据库连接池管理、SQL 查询优化、索引设计与使用、数据库事务管理、分布式数据库与缓存系统的结合。通过分析常见性能瓶颈,帮助开发者掌握 如何优化数据库操作,提升 Python 项目在数据库层的响应速度与处理能力。

0

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号