/** * 用户登录操作 * 用户登录成功后将权限信息写入$_SESSION * 如果用户登录成功并且用户名与$superadmin参数相同,此用户即为超级用户,不受任何访问权限限制 * @param string $username 用户名 * @param string $password 密码 * @param string $superadmin 超级管理员帐号 * @param string $fieldUserName 用户表中的用户名字段名称 * @param string $fieldPassword 用户表中的密码字段名称 * @return boolean */ public static function login($username, $password, $superadmin = null, $fieldUserName = null, $fieldPassword = null) { $superadmin = is_null($superadmin) ? C("RBAC_SUPER_ADMIN") : $superadmin; $fieldUserName = is_null($fieldUserName) ? C("RBAC_USERNAME_FIELD") : $fieldUserName; //用户表中的用户名字段名称 $fieldPassword = is_null($fieldPassword) ? C("RBAC_PASSWORD_FIELD") : $fieldPassword; //用户表中的密码字段名称 if (!C("RBAC_USER_TABLE")) { error(L("rbac_rbac_user_login1")); } $table_user = C('DB_PREFIX') . str_ireplace(C('DB_PREFIX'), "", C("RBAC_USER_TABLE")); //验证有无前缀得到用户表 $db = M($table_user, true); $user = $db->find("{$fieldUserName}='{$username}'"); if (!$user) { self::$error = L("rbac_rbac_user_login2"); return false; } if ($user[$fieldPassword] != $password) { self::$error = L("rbac_rbac_user_login3"); return false; } $db->table(C("RBAC_ROLE_USER_TABLE")); $sql = "SELECT * FROM " . C("DB_PREFIX") . C("RBAC_ROLE_TABLE") . " AS r," . C('DB_PREFIX') . C('RBAC_ROLE_USER_TABLE') . " AS r_u WHERE r_u.rid = r.rid AND uid = '" . $user['uid'] . "'"; $userRoleInfo = $db->query($sql); //获得用户组信息 $_SESSION['username'] = $user['username']; $_SESSION[C("RBAC_AUTH_KEY")] = $user['uid']; $_SESSION['role'] = $userRoleInfo[0]['rname']; $_SESSION['rid'] = $userRoleInfo[0]['rid']; //是否判断超管理员 if (strtoupper($user['username']) == strtoupper($superadmin)) { //登录成功 $_SESSION[C("RBAC_SUPER_ADMIN")] = 1; $_SESSION["RBAC"] = array(); return true; } if (!$_SESSION['rid']) { //不属于任何角色 self::$error = L("rbac_rbac_user_login4"); return false; } self::getAccess(); //获得权限写入SESSION return true; }
/** * 用户登录操作 * 用户登录成功后将权限信息写入$_SESSION * 如果用户登录成功并且用户名与$superadmin参数相同,此用户即为超级用户,不受任何访问权限限制 * @param string $username 用户名 * @param string $password 密码 * @param string $superadmin 超级管理员帐号 * @param string $fieldUserName 用户表中的用户名字段名称 * @param string $fieldPassword 用户表中的密码字段名称 * @return boolean */ public static function login($username, $password, $superadmin = null, $fieldUserName = null, $fieldPassword = null) { $superadmin = is_null($superadmin) ? C("RBAC_SUPER_ADMIN") : $superadmin; $fieldUserName = is_null($fieldUserName) ? C("RBAC_USERNAME_FIELD") : $fieldUserName; //用户表中的用户名字段名称 $fieldPassword = is_null($fieldPassword) ? C("RBAC_PASSWORD_FIELD") : $fieldPassword; //用户表中的密码字段名称 if (!C("RBAC_USER_TABLE")) { halt('用户表设置错误,请在配置文件中添加用户表'); } $table_user = str_ireplace(C('DB_PREFIX'), "", C("RBAC_USER_TABLE")); //验证有无前缀得到用户表 // echo "$fieldUserName='******'";die; $db = M($table_user); $user = $db->where("{$fieldUserName}='{$username}'")->all(); // p($user);//die; if (!$user) { self::$error = '用户不存在'; return false; } if ($user[0][$fieldPassword] != $password) { self::$error = '密码输入错误'; return false; } $uid = C("RBAC_AUTH_KEY"); //验证session中的key $db->table = C("RBAC_ROLE_USER_TABLE"); $sql = "SELECT * FROM " . C("DB_PREFIX") . C("RBAC_ROLE_TABLE") . " AS r," . C('DB_PREFIX') . C('RBAC_ROLE_USER_TABLE') . " AS r_u WHERE r_u.role_id = r.id AND user_id = '" . $user[0]['id'] . "'"; // echo $sql;die; $userRoleInfo = $db->query($sql); //获得用户组信息 // p($userRoleInfo); $_SESSION['username'] = $user[0]['admin_username']; $_SESSION[C("RBAC_AUTH_KEY")] = $user[0]['id']; $_SESSION['role'] = $userRoleInfo[0]['name']; $_SESSION['rid'] = $userRoleInfo[0]['role_id']; //是否判断超管理员 // echo strtoupper($user[0]['admin_username']); // echo strtoupper($superadmin); // p($superadmin);die; // p($_SESSION);die; if (strtoupper($user[0]['admin_username']) == strtoupper($superadmin)) { //登录成功 // echo C("RBAC_SUPER_ADMIN");die; $_SESSION[C("RBAC_SUPER_ADMIN")] = 1; $_SESSION["RBAC"] = array(); return true; } if (!$_SESSION['rid']) { //不属于任何角色 self::$error = '不属于任何组,没有访问权限'; return false; } self::getAccess(); //获得权限写入SESSION return true; }