<?phpnamespace backendcomponents;use Yii;use yii
bacRule;class ArticleRule extends Rule{public $name = "article";public function execute($user, $item, $params){// 这里先设置为false,逻辑上后面再完善return false;}}接着,我们才可以去后台rule列表(/admin/rule/index)添加rule。具体添加方式可参考下方截图
注意,上面这一步很多人会死在类名的添加上,记得加上我们ArticleRule文件所在的命名空间!
我们看第三步,该步骤也是很容易出错的地方!该篇教程请注意集中精力,前方高能!
我们访问权限列表(/admin/permission/index)新增权限,该权限只针对文章的修改,随后我们将其分配给用户所属角色
需要注意了,此处严重警告,这里新增加的权限所控制的路由也就是文章的更新操作(/article/update)分配给当前用户仅且一次,重复分配当前操作给所属角色或用户,可能造成rule失效,失效原因则是覆盖!
此刻再次刷新文章的更新页面(/article/update/1),很显然直接给我们了403 forbidden没权限访问的提示,也就是我们刚刚添加的rule生效了!如果此刻没生效,请检查上面所说的两个注意点!
然后我们实现ArticleRule::execute方法内业务逻辑,可参考如下:
class ArticleRule extends Rule{public $name = "article";/*** @param string|integer $user 当前登录用户的uid* @param Item $item 所属规则rule,也就是我们后面要进行的新增规则* @param array $params 当前请求携带的参数. * @return true或false.true用户可访问 false用户不可访问*/public function execute($user, $item, $params){$id = isset($params["id"]) ? $params["id"] : null;if (!$id) {return false;}$model = Article::findOne($id);if (!$model) {return false;}$username = Yii::$app->user->identity->username;$role = Yii::$app->user->identity->role;if ($role == User::ROLE_ADMIN || $username == $model->operate) {return true;}return false;}}最后就是验证了,到底我们所实现的rule认证起作用了没呢?