Files
wsa_server/models/User_model.php
T
2026-09-14 16:32:07 +08:00

493 lines
14 KiB
PHP

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class User_model extends CI_Model
{
/**
* 用户模型部分
*
*/
function __construct()
{
parent::__construct();
$this->load->database();
}
/**
* 登陆校验用户名密码
* @param $username
* @param $passwd
*/
function validate($username, $passwd)
{
$sql = "SELECT
*
FROM
sys_user
WHERE
username = '" . $username . "'
AND password = '" . $passwd . "'";
$query = $this->db->query($sql);
if (($query->row_array()) == null) {
$result = array(
'success' => FALSE,
'userinfo' => null
);
} else {
$result = array(
'success' => TRUE,
'userinfo' => $query->row_array()
);
}
return $result;
}
/**
* 根据 $user_id 获取上次登录角色id
* @param $Id
*/
function getLastLoginRole($Id)
{
$sql = "SELECT
role_id
FROM
sys_user_token
WHERE
user_id =" . $Id . "
ORDER BY
create_time DESC
limit 1";
$query = $this->db->query($sql);
$RolesArr = $query->result_array();
if (empty($RolesArr)) {
return [
"code" => "50020",
"message" => "用户首次登录,没有最后一次登录信息"
];
} else {
foreach ($RolesArr as $k => $v) {
$sqlx = "SELECT
DISTINCT dept_id
FROM
`sys_user_role`
WHERE
user_id =" . $Id . " and role_id=" . $v['role_id'];
$queryx = $this->db->query($sqlx);
if (empty($queryx->result_array())) {
return [
"code" => "50018",
"message" => "用户机构信息不完整, 无法登录, 请联系管理员"
];
}
}
return [
"code" => "20000",
"role_id" => $RolesArr[0]['role_id']
];
}
}
/**
* 根据 $user_id 获取一个角色作为当前选择默认角色
* 只在用户初次登录时使用
* @param $Id
*/
function getCurrentRole($Id)
{
$sql = "SELECT
DISTINCT role_id
FROM
sys_user_role
WHERE
user_id =" . $Id;
$query = $this->db->query($sql);
if (empty($query->result_array())) {
return [
"code" => "50018",
"message" => "用户未分配角色, 无法登录, 请联系管理员"
];
}
$RolesArr = $query->result_array();
foreach ($RolesArr as $k => $v) {
$sqlx = "SELECT
DISTINCT dept_id
FROM
`sys_user_role`
WHERE
user_id =" . $Id . " and role_id=" . $v['role_id'];
$queryx = $this->db->query($sqlx);
if (empty($queryx->result_array())) {
return [
"code" => "50018",
"message" => "用户机构信息不完整, 无法登录, 请联系管理员"
];
}
}
return [
"code" => "20000",
"role_id" => $RolesArr[0]['role_id'],
"message" => "成功获取第一个角色"
];
}
/**
* @param $RoleId
* @param $UserId
* @return bool
* 判断该用户角色是否已分配机构部门
*/
function roleHasDept($RoleId, $UserId)
{
$sql = "SELECT
DISTINCT dept_id
FROM
`sys_user_role`
WHERE
user_id =" . $UserId . " and role_id=" . $RoleId;
$query = $this->db->query($sql);
if (empty($query->result_array())) {
return FALSE;
} else {
return TRUE;
}
}
/**
* 根据$token拉取用户信息
* @param $Token
*/
function getUserInfo($Token)
{
$sql = "SELECT
u.id,
u.username,
u.tel,
u.email,
u.avatar,
u.sex,
u.last_login_ip,
u.last_login_time,
u.status
FROM
sys_user_token ut,
sys_user u
WHERE
ut.token = '" . $Token . "'
AND u.id = ut.user_id";
$query = $this->db->query($sql);
if (($query->row_array()) == null) {
$result = array(
'success' => FALSE,
'userinfo' => null
);
} else {
$result = array(
'success' => TRUE,
'userinfo' => $query->row_array()
);
}
return $result;
}
/**
* 根据$token拉取用户角色信息
* @param $Token
*/
function getUserRolesByToken($Token)
{
$sql = "SELECT
DISTINCT r.id,r.name
FROM
sys_user_token ut,
sys_user_role ur,
sys_role r
WHERE
ut.token = '" . $Token . "'
AND ur.user_id = ut.user_id
AND r.id = ur.role_id
and r.status=1";
$query = $this->db->query($sql);
return $query->result_array();
}
/**
* 根据$token拉取用户当前选择角色id
* @param $Token
*/
function getCurrentRoleByToken($Token)
{
$sql = "SELECT
ut.role_id
FROM
sys_user_token ut
WHERE
ut.token = '" . $Token . "'";
$query = $this->db->query($sql);
return $query->row_array()['role_id'];
}
/**
* 根据$token拉取用户当前选择部门
* @param $Token
*/
function getCurrentDeptByToken($Token)
{
$sql = "SELECT
ut.user_id,
ut.role_id
FROM
sys_user_token ut
WHERE
ut.token = '" . $Token . "'";
$query = $this->db->query($sql);
$arr = $query->result_array();
$sqlx = "SELECT DISTINCT
d.id,
d.pid,
d.name label
FROM
sys_user_role ur,
sys_dept d
WHERE
ur.user_id =" . $arr[0]['user_id'] . "
AND ur.role_id =" . $arr[0]['role_id'] . "
AND ur.dept_id = d.id";
$queryx = $this->db->query($sqlx);
return $queryx->result_array();
}
/**
* 获取所有用户列表
*/
function getUserList($deptIdStr, $filters, $sort, $page, $pageSize)
{
// 默认排序
$orderStr = '';
if ($sort['prop'] && $sort['order']) {
$orderStr = " ORDER BY " . $sort['prop'] . " " . ($sort['order'] === 'ascending' ? 'asc' : 'desc');
}
$filterStr = '';
$j = 0;
foreach ($filters as $k => $v) {
if ($v['value'] !== '' && !is_null($v['value'])) {
if ($j) {
$filterStr = $filterStr . " and ";
}
if ($v['prop'] === 'username') {
$filterStr .= $v['prop'] . " like '%" . $v['value'] . "%' ";
}
if ($v['prop'] === 'status') {
$filterStr .= $v['prop'] . "=" . $v['value'];
}
$j++;
}
}
if ($filterStr) {
$filterStr = " and " . $filterStr;
}
//TODO: 将超级管理员隐藏 sys_user u where id != 1 and id IN (
$sql = "SELECT
*
FROM
sys_user where id IN (
SELECT DISTINCT
user_id
FROM
sys_user_role ur
WHERE
dept_id IN (" . $deptIdStr . ")
) "
. $filterStr
. $orderStr . " limit " . ($page - 1) * $pageSize . "," . $pageSize;
$query = $this->db->query($sql);
return $query->result_array();
}
function getUserListCnt($deptIdStr, $filters)
{
$filterStr = '';
$j = 0;
foreach ($filters as $k => $v) {
if ($v['value'] !== '' && !is_null($v['value'])) {
if ($j) {
$filterStr = $filterStr . " and ";
}
if ($v['prop'] === 'username') {
$filterStr .= $v['prop'] . " like '%" . $v['value'] . "%' ";
}
if ($v['prop'] === 'status') {
$filterStr .= $v['prop'] . "=" . $v['value'];
}
$j++;
}
}
if ($filterStr) {
$filterStr = " and " . $filterStr;
}
// TODO: 将超级管理员隐藏 sys_user u where id != 1 and id IN (
$sql = "SELECT
count(u.id) cnt
FROM
sys_user u where id IN (
SELECT DISTINCT
user_id
FROM
sys_user_role ur
WHERE
dept_id IN (" . $deptIdStr . ")
) "
. $filterStr;
$query = $this->db->query($sql);
if (empty($query->result_array())) {
return 0;
} else {
$result = $query->result_array();
return $result[0]['cnt'];
}
}
/**
* 获取所有角色列表 参考 permission.php 权限库,因为需要左关联组合,所以只能重新写模型
* 并且根据$token 获取对应Token用户角色所拥有的角色类权限选项
* 当用户含有未拥有的角色类权限时 设置 isDisabled 禁用选择
* 新增编辑时使用
*
*/
function getRoleOptions($Token)
{
$sql = "SELECT
r.id,
r.name,
r.remark,
r.status,
IF (
t.name IS NULL,
'true',
'false'
) isDisabled,
r.listorder
FROM
sys_role r
LEFT JOIN (
SELECT
r.id,
r.name,
r.remark,
r.status
FROM
sys_user_token ut,
sys_role_perm rp,
sys_perm p,
sys_role r
WHERE
ut.token = '" . $Token . "'
AND ut.role_id = rp.role_id
AND rp.perm_id = p.id
AND p.perm_type = 'role'
AND p.r_id = r.id
AND r.status = 1
) t ON r.id = t.id
ORDER BY r.listorder";
$query = $this->db->query($sql);
$RoleArr = $query->result_array();
// string to boolean
foreach ($RoleArr as $k => $v) {
$v['isDisabled'] === 'true' ? ($RoleArr[$k]['isDisabled'] = true) : ($RoleArr[$k]['isDisabled'] = false);
}
return $RoleArr;
}
/**
* 根据 用户ID 获取该用户被分配的角色
*
*/
function getUserRoles($Id)
{
$sql = "SELECT
DISTINCT r.id,
r.name,
r.remark,
r.status
FROM
sys_user_role ur,
sys_role r
WHERE
ur.role_id = r.id
AND ur.user_id =" . $Id;
$query = $this->db->query($sql);
return $query->result_array();
}
function getUserRolesDept($user_id, $role_id)
{
$sql = "SELECT
*
FROM
sys_user_role ur
WHERE
ur.role_id =" . $role_id . "
AND ur.user_id =" . $user_id;
$query = $this->db->query($sql);
return $query->result_array();
}
/**
* 根据 用户ID 获取该用户所拥有的角色
* [
* ['user_id'=> 1, 'role_id'=>1]
* ...
* ]
*/
function getRolesByUserId($Id)
{
$sql = "SELECT
ur.user_id,ur.role_id,ur.dept_id
FROM
sys_user_role ur
WHERE ur.user_id=" . $Id;
$query = $this->db->query($sql);
return $query->result_array();
}
/*
* 微信登录认证
*/
function getUserInfoByTel($Tel)
{
$sql = "SELECT
u.*
FROM
sys_user u
WHERE u.tel='" . $Tel . "'";
$query = $this->db->query($sql);
return $query->result_array();
}
/***********************
* 用户模型部分结束
***********************/
}