0, 'register_time', 'register_ip', 'last_update_time'];
protected $update = ['last_update_time'];
public function getRoleUsers($where = null, $order = null, $field = null, $limit = null) {
$this->alias('u')->join('auth_role ar', 'u.role_id=ar.id', 'LEFT');
if (is_array($where)) {
$where = array_merge([], $where);
}
if ($where) {
$this->where($where);
}
if ($order) {
$this->order($order);
}
if ($field) {
$this->field($field);
}
if (empty($limit)) {
$limit = Config::get('list_rows');
}
$this->group('u.id');
//$this->having('max(ud.dept_id)');
$object = $this->paginate($limit);
return $object;
}
public function getPageLists($where = null, $order = null, $field = null, $limit = null) {
$this->alias('u')->join('user_role ur', 'u.role_id=ur.id', 'LEFT');
if (is_array($where)) {
$where = array_merge(['u.stat' => ['eq', '0']], $where);
}
if ($where) {
$this->where($where);
}
if ($order) {
$this->order($order);
}
if ($field) {
$this->field($field);
}
if (empty($limit)) {
$limit = Config::get('list_rows');
}
$object = $this->paginate($limit);
return $object;
}
public function getOption($id = 0, $where = null, $order = null, $field = null, $limit = null) {
$options = '';
if ($where) {
$this->where($where);
}
if ($order) {
$this->order($order);
}
if ($field) {
$this->field($field);
}
if ($limit) {
$this->limit($limit);
}
$list = $this->select();
if ($list) {
//$options = '' . "\n";
foreach ($list as $k => $row) {
if ($row['id'] == $id) {
$options.='' . "\n";
} else {
$options.='' . "\n";
}
}
}
return $options;
}
public function insertRow($data, $siteid = 32267) {
$row = array(
'username' => $data['username'],
'email' => $data['email'],
'role_id' => $data['role_id'],
'stat' => $data['stat'],
);
if (isset($data['password'])) {
//$salt = getstr_random();
//$row['password'] = md5($data['password'] . $salt);
$row['salt'] = $data['password'];
$row['password'] = md5($data['password']);
}
if (isset($data['picture'])) {
$row['picture'] = $data['picture'];
}
if (!isset($data['position'])) {
$row['position'] = 'admin';
}
$row['siteid'] = $siteid;
$object = $this::create($row);
return $object;
}
public function updateRow($data = [], $where = [], $field = null) {
if (isset($data['id'])) {
$row['id'] = $data['id'];
}
if (isset($data['username'])) {
$row['username'] = $data['username'];
}
if (isset($data['role_id'])) {
$row['role_id'] = $data['role_id'];
}
if (isset($data['stat'])) {
$row['stat'] = $data['stat'];
}
if (isset($data['position'])) {
$row['position'] = $data['position'];
}
if (isset($data['email'])) {
$row['email'] = $data['email'];
}
if (isset($data['picture'])) {
$row['picture'] = $data['picture'];
}
$object = $this::update($row, $where, $field);
return $object;
}
/**
* 更新用户密码
*/
public function updatePassword($data) {
//$salt = getstr_random();
$row = array(
'id' => $data['id'],
//'password' => md5($data['newpassword'] . $salt),
'salt' => $data['newpassword'],
'password' => md5($data['newpassword']),
);
$object = $this::update($row);
return $object;
}
/**
* 用户登录认证
* @param string $condition 验证条件如用户名邮箱手机号ID
* @param string $password 用户密码
* @param integer $type 用户名类型 (1-用户名,2-邮箱,3-手机,4-UID)
* @return integer 登录成功-用户ID,登录失败-错误编号
*/
public function login($condition, $password, $type = 1) {
$where = [];
switch ($type) {
case 1:$where['username'] = $condition;
break;
case 2:$where['email'] = $condition;
break;
case 3:$where['mobile'] = $condition;
break;
case 4:$where['id'] = $condition;
break;
default:
action_log('登录失败', '提交参数错误 被序列化的信息:' . serialize(Request::instance()->request()), -1, Request::instance()->header());
return ['status' => false, 'msg' => '参数错误', 'id' => 0]; //参数错误
}
/* 获取用户数据 */
$row = $this->where($where)->find();
if (empty($row) || (int) $row->stat < 0) {
action_log('登录失败', '用户不存在或被禁用 被序列化的信息:' . serialize(Request::instance()->request()), -1, Request::instance()->header());
return ['status' => false, 'msg' => '用户不存在或被禁用', 'id' => 0];
}
/* 验证用户密码 */
if (md5($password) !== $row->password) {
action_log('登录失败', '密码错误 被序列化的信息:' . serialize(Request::instance()->request()), -1, Request::instance()->header());
return ['status' => false, 'msg' => '密码错误', 'id' => 0];
}
unset($row->password);
unset($row->salt);
/* 登录用户 */
$this->autoLogin($row->toArray());
return ['status' => true, 'msg' => '登录成功', 'id' => $row->id]; //登录成功,返回用户ID
}
/**
* 自动登录用户
* @param integer $row 用户信息数组
*/
private function autoLogin($row) {
/* 更新登录信息 */
$data = [
'id' => $row['id'],
'login' => \think\Db::raw('`login`+1'),
'last_login_time' => Request::instance()->time(),
'last_login_ip' => Request::instance()->ip()
];
$this::update($data);
$fields = ['id', 'username', 'email', 'picture', 'last_login_time', 'role_id', 'stat', 'siteid'];
foreach ($fields as $field) {
$session_user[$field] = $row[$field];
}
/* 记录登录SESSION和COOKIES */
Session::set('user_auth', $session_user);
Session::set('user_auth_sign', data_auth_sign($session_user));
$content = '用户' . $row['username'] . '(' . $row['id'] . ')上次登录时间:' . date('Y-m-d H:i:s', $row['last_login_time']) . ',上次登录IP:' . $row['last_login_ip'];
action_log('登录成功', $content, $row['id'], Request::instance()->header());
unset($row);
//记录行为
//$param = ['action' => 'user_login', 'model' => 'member', 'record_id' => $row['id']];
//Hook::listen('user_behavior', $param);
}
public function logout() {
Session::delete('user_auth', null);
Session::delete('user_auth_sign', null);
}
protected function setRegisterTimeAttr($value, $data) {
return time();
}
protected function setLastLoginTimeAttr($value, $data) {
return time();
}
protected function setLastUpdateTimeAttr($value, $data) {
return time();
}
protected function setRegisterIpAttr() {
return Request::instance()->ip();
}
}