如何通过用户角色禁用按钮?现有代码对sales用户不生效求助
问题排查与修复方案
我来帮你搞定这个按钮显示的问题~你的核心问题出在PHP条件判断的语法使用错误上,原代码里的if语句没有正确包裹需要控制的按钮代码块,导致条件判断完全没起作用,不管用户角色是什么,按钮都会被渲染出来。
原代码的问题点
你写的这段代码:
<div class="footer-section"> <?php if($this->user->role !== 'admin' && $this->user->role !== 'worker') ?> <button type="button" class="btn btn-red col-md-6 flat-box-btn" data-toggle="modal" data-target="#AddSale"> <h5 class="text-bold"><?=label('PAY');?></h5> </button> </div>
这里的if语句后面没有用大括号{}或者endif标记控制范围,PHP会把这个if当成只执行后面的空语句,后续的按钮HTML完全不受条件约束,所以哪怕是sales用户登录,按钮也会照常显示。
修复方案(两种可选)
方案1:用大括号包裹控制代码块
把按钮代码放到if的大括号内,确保只有满足条件时才渲染按钮:
<div class="footer-section"> <?php if($this->user->role !== 'admin' && $this->user->role !== 'worker') { ?> <button type="button" class="btn btn-red col-md-6 flat-box-btn" data-toggle="modal" data-target="#AddSale"> <h5 class="text-bold"><?=label('PAY');?></h5> </button> <?php } ?> </div>
方案2:使用PHP的endif语法(模板场景可读性更好)
这种方式在混合HTML的PHP模板里很常用,能避免大括号嵌套混乱:
<div class="footer-section"> <?php if($this->user->role !== 'admin' && $this->user->role !== 'worker'): ?> <button type="button" class="btn btn-red col-md-6 flat-box-btn" data-toggle="modal" data-target="#AddSale"> <h5 class="text-bold"><?=label('PAY');?></h5> </button> <?php endif; ?> </div>
额外验证小技巧
如果修复后还是有问题,可以先在页面上输出当前用户的角色,确认$this->user->role的值是否符合预期:
<?php echo "当前用户角色:" . $this->user->role; ?>
这样能快速排查是不是角色值本身的问题,比如有没有大小写差异(比如Admin和admin)或者变量名写错的情况。
内容的提问来源于stack exchange,提问作者Yusa
相关产品推荐
相关产品推荐

