feat: init project codebase
This commit is contained in:
@@ -0,0 +1,493 @@
|
||||
<?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();
|
||||
}
|
||||
|
||||
/***********************
|
||||
* 用户模型部分结束
|
||||
***********************/
|
||||
}
|
||||
Reference in New Issue
Block a user