1

我有带有下一个 accessRules 的控制器:

  public function accessRules()
  {
    return array(
      array('allow',
        'actions'=>array('login','logout'),
        'users'=>array('*'),
      ),
      array('allow',
        'actions'=>array('index'),
        'users'=>array('@'),
      ),
      array('allow',
        'actions'=>array('users'),
        'expression'=>'$user->getState(\'role\')==0',
      ),
      array('deny',
        'users'=>array('*'),
      ),
    );
  }

actions() 方法指定的所有动作(在所有控制器中):

  public function actions()
  {
    return array(
      'index'=>$this->module->getName().'.controllers.main.IndexAction',
      'login'=>$this->module->getName().'.controllers.main.LoginAction',
      'logout'=>$this->module->getName().'.controllers.main.LogoutAction',
    );
  }

是否有机会获得控制器/操作列表取决于当前用户权限?我想构建一个包含所有控制器及其操作列表的导航菜单,如下所示:

  1. 控制器1 (show only if current user have permissions to access it)
    • 控制器1/动作1 (show only if current user have permissions to access it)
    • 控制器1/动作2 (show only if current user have permissions to access it)
  2. 控制器2 (show only if current user have permissions to access it)
    • 控制器2/动作1 (show only if current user have permissions to access it)
    • 控制器2/动作2 (show only if current user have permissions to access it)
4

1 回答 1

0

据我所知,如果在您的控制器中声明了访问规则,则无法获取它们。

您可能必须使用 Yii 的基于角色的访问控制 (RBAC) 并将您的访问规则保存在外部,可能在数据库中。阅读这里了解更多信息:Yii 文档 - 基于角色的访问控制

还有一个非常强大的 Yii 扩展,叫做 Rights,它为 RBAC 提供了一个后端。

目前这可能看起来有点矫枉过正,但 RBAC 的灵活性无与伦比。您可以非常精细地创建用户角色并将操作分配给角色。

如果您使用它,您可以检查访问权限Yii::app->user->checkAccess('post.create'),这正是您需要这样一个菜单。但是我认为您无法立即获得所有可用操作的列表,但这可能是您可以相对轻松地扩展的东西。

于 2012-10-01T12:15:15.240 回答