Yii的srbac拓展中“用户已经获授权项”点下拉框,选择一个有权限的用户时,根本无法列出权限。

原因是srbac把数据库的表中的ID默认为数字,像 123这样,但如果不是数字像这样 'y0f22ffc2fef712fd602a1ef64ab319t' 。那么这个是不会出来的,那么只能修改代码 了。

修改    \protected\modules\srbac\controllers\AuthitemController.php 文件中的 actionShowAssignments 方法

源代码如下

  public function actionShowAssignments() {
$userid = isset($_GET["id"]) ? $_GET["id"] :
$_POST[Helper::findModule('srbac')->userclass][$this->module->userid];
$user = $this->module->getUserModel()->findByPk($userid);
$username = $user->{$this->module->username};
$r = array(0 => array(0 => array()));
if ($userid > 0) {
$auth = Yii::app()->authManager;
/* @var $auth CDbAuthManager */
$ass = $auth->getAuthItems(2, $userid);
$r = array();
foreach ($ass as $i => $role) {
$curRole = $role->name;
$r[$i] = $curRole;
$children = $auth->getItemChildren($curRole);
$r[$i] = array();
foreach ($children as $j => $task) {
$curTask = $task->name;
$r[$i][$j] = $curTask;
$grandchildren = $auth->getItemChildren($curTask);
$r[$i][$j] = array();
foreach ($grandchildren as $k => $oper) {
$curOper = $oper->name;
$r[$i][$j][$k] = $curOper;
}
}
}
// Add always allowed opers
$r["AlwaysAllowed"][""] = $this->module->getAlwaysAllowed();
$this->renderPartial('userAssignments', array('data' => $r, 'username' => $username));
}
}

我们把第 7 行的判断语句修改下 if ($userid > 0)

修改成 if (count($user)> 0) ,即可,修改后代码如下

  public function actionShowAssignments() {
$userid = isset($_GET["id"]) ? $_GET["id"] :
$_POST[Helper::findModule('srbac')->userclass][$this->module->userid];
$user = $this->module->getUserModel()->findByPk($userid);
$username = $user->{$this->module->username};
$r = array(0 => array(0 => array()));
if (count($user) > 0) {
$auth = Yii::app()->authManager;
/* @var $auth CDbAuthManager */
$ass = $auth->getAuthItems(2, $userid);
$r = array();
foreach ($ass as $i => $role) {
$curRole = $role->name;
$r[$i] = $curRole;
$children = $auth->getItemChildren($curRole);
$r[$i] = array();
foreach ($children as $j => $task) {
$curTask = $task->name;
$r[$i][$j] = $curTask;
$grandchildren = $auth->getItemChildren($curTask);
$r[$i][$j] = array();
foreach ($grandchildren as $k => $oper) {
$curOper = $oper->name;
$r[$i][$j][$k] = $curOper;
}
}
}
// Add always allowed opers
$r["AlwaysAllowed"][""] = $this->module->getAlwaysAllowed();
$this->renderPartial('userAssignments', array('data' => $r, 'username' => $username));
}
}

修改后就能看到效果了,效果如下

如过不懂什么原因,可分析下源代码。

最新文章

  1. 使用ROW_NUMBER()+临时表+While 实现表遍历
  2. android中的回调请求的个人理解
  3. IIS部署站点相关经验总结
  4. 移动web初体验
  5. C语言教学--二维数组和指针的理解
  6. SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法
  7. eclipse导入svn项目,项目却没有svn的标记
  8. float类型进行计算精度丢失的问题
  9. Running Central Admin on Multiple Servers within a Farm
  10. PL/SQL 访问网页(get or post方式)
  11. Unity该插件NGUI得知(9)—— Tween并转换成世界坐标系的大小NGUI尺寸
  12. 全局scope与Isolate scope通信
  13. String之常量池小结
  14. SAP GUI个性化设置
  15. 记python使用grpc
  16. JS 跳出多重循环
  17. PID控制器介绍
  18. PHP安装-phpMyAdmin+Discuz
  19. web component的理解
  20. U3D学习08-异步、协程

热门文章

  1. C# 针对特定的条件进行锁操作,不用lock,而是mutex
  2. [小米OJ] 8. 最少交换次数
  3. 单页面(如react,vue)网站的服务器渲染 SSR 之 SEO 大杀器 Rendertron
  4. HTML&CSS兼容性总结
  5. java反射原理及Class应用
  6. Python字典排序
  7. PHP7安装mysql扩展
  8. 【MySQL】服务无法启动(Mac)
  9. Eclipse 设置黑色主题
  10. 【Android】Android sdk content loader 0%