Ejemplo n.º 1
0
 /**
  * 检查用户是否有修改用户密码权限
  *
  * @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;
 }