在前面分享的yii2搭建博客系统教程中把这登录验证才能发布文章给忘记了,这里补上。
无论是博客还是其他网站,出于安全考虑都会做一些行为限制和过滤。比如发布文章、留言等都需要登录账号才能使用,否则将无法使用这些功能。在YII2中控制行为过滤的方法是behaviors,通过这个方法可以控制哪些行为需要登录才能使用,哪些页面只能post访问,哪些页面只能get访问等。
下面先把博客文章发布登录验证的代码放上来,把这个方法放到PostController中
/** * 行为权限控制 * @return array */ public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'only' => ['index', 'create', 'upload', 'ueditor'], 'rules' => [ [ 'actions' => ['index'], 'allow' => true, ], [ 'actions' => ['create', 'upload', 'ueditor'], 'allow' => true, 'roles' => ['@'], ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ // '*' => ['get','post'], 'index' => ['get'], 'create' => ['get','post'], 'upload' => ['post'], 'ueditor' => ['get'], ], ], ]; }
behaviors方法参数设置解析:
'only' => ['index', 'create', 'upload', 'ueditor'],表示在PostController控制器中(PostController控制器中的behaviors行为控制只对该控制器的行为控制有效,其他控制器中如果也用控制过来行为需要在控制器内单独写behaviors方法),
'rules' => [ [ 'actions' => ['index'], 'allow' => true, ], [ 'actions' => ['create', 'upload', 'ueditor'], 'allow' => true, 'roles' => ['@'], ], ],
rules是行为控制规则,'allow' => true 表示允许行为操作,如果改为false,无论没有登录还是登录了都无法执行该操作,例如:
//假如PostsController控制器中index的行为规则是这样写的, //如果我们再次访问 frontend.yii2.com/posts/index //没有登录的情况下会跳转到登录界面 //如果登录的情况下访问 会提示Forbidden (#403) 您没有执行此操作的权限,如下图界面所示 'rules' => [ [ 'actions' => ['index'], 'allow' => false, ], ],
'roles' => ['@'] 表示只允许登录状态下操作,也就是要执行roles对应的action必须要登录。
'roles' => ['?'] 表示游客可操作,即登录不登录都可以执行的操作。
'actions' => [ // '*' => ['get','post'], 'index' => ['get'], 'create' => ['get','post'], 'upload' => ['post'], 'ueditor' => ['get'], ],
action中的每一项表示当前行为运行的操作方式,
比如 'index' => ['get'] 只能以get的方式访问index
'create' => ['get','post'] 创建文章分两步操作,打开文章创建页面——填写数据提交保存,所以get和post操作都要允许,少一个都会报权限错误。
以上就是博客文章发布登录验证以及行为过滤方法解析的全部内容。