/** * 检查用户是否有修改用户密码权限 * * @param ORM_Admin_Member_Data $member * @throws Exception * * @return boolean */ protected function check_auth_for_edit_password(ORM_Admin_Member_Data $member) { # 超管 if ($this->session()->member()->perm()->is_super_perm()) { return true; } if ($member->perm()->is_super_perm()) { # 非超管操作超管 throw new Exception('您不具备修改超管密码的权限', -1); } if ($member->id && $member->id == $this->session()->member()->id) { if ($this->session()->member()->perm()->is_own('administrator.edit_self_password')) { # 修改自己的密码 return true; } } if (!$this->session()->member()->perm()->is_own('administrator.change_user_password')) { # 拥有所在组管理权限 if (array_diff($member->groups()->ids(), $this->session()->member()->groups()->ids())) { # 没有相同的组 $this->message('您操作的用户拥有你不具备的权限组,所有你无法修改此用户密码', -1); } foreach ($member->groups()->ids() as $group_id) { # 不具备组管理权限 if (!$this->session()->member()->is_own_group_perm($group_id, 'edit_users_password')) { throw new Exception('您不具备修改此管理员密码的权限', -1); } } } if (!$this->check_is_over_perm($member)) { throw new Exception('此管理员拥有您不具备的权限,所以您不可修改此管理员密码', -1); } return true; }