项目实战篇-餐馆管理系统—MFC,PHP,MySql:4.权限管理模块
2016-12-18 17:09
941 查看
1.MFC 端 RightAdmin 类 继承 Person 类
生成继承 CDialogEx 的 RightDlg类,然后修改该类让它再继承刚刚写好 RightAdmin类
为对话框资源添加控件
为了不让程序在载入时卡死,所以将获取权限列表的操作放入线程中。
调用方式:
MFC 端对话框部分代码:
2.php端
right.php
在 db_info.php 中添加代码
运行时截图:
快考试了,可能更新不会这么快了O(∩_∩)O
#pragma once #include "Person.h" #import "C:\\windows\\system32\\winhttp.dll" class RightAdmin : public Person { public: RightAdmin(CString strUser, CString strSession); ~RightAdmin(); // 获取权限列表 start 是从第几页里取,nLimit 取列表个数 CString getRightList(int nStart, int nLimit); // 修改 strUser 的权限 为 strRight CString changeUserRight(CString strUser, CString strRight); // 取回权限名称列表 CString getRightNameList(); };
#define STRING_RIGHT_HOST_ADDRESS L"http://192.168.200.128/myAdminSystem/right.php" RightAdmin::RightAdmin(CString strUser, CString strSession) : Person(strUser, strSession) { } RightAdmin::~RightAdmin() { } CString RightAdmin::getRightList(int nStart, int nLimit) { CoInitialize(NULL); WinHttp::IWinHttpRequestPtr ptrHttp = nullptr; ptrHttp.CreateInstance(__uuidof(WinHttp::WinHttpRequest)); if (nullptr == ptrHttp) { return L""; } CString strGetUrl = L""; strGetUrl.Format(L"%s?start=%d&limit=%d", STRING_RIGHT_HOST_ADDRESS, nStart, nLimit); ptrHttp->Open(L"GET", strGetUrl.GetBuffer()); strGetUrl.ReleaseBuffer(); ptrHttp->SetRequestHeader(L"User-Agent", L" Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 50.0.2661.102 Safari / 537.36"); ptrHttp->SetRequestHeader(L"Content-Type", L"application/x-www-form-urlencoded"); ptrHttp->SetRequestHeader(L"Cookie", this->getSession().GetBuffer()); ptrHttp->Send(); CoUninitialize(); CString strRet = ptrHttp->GetResponseText(); return strRet; } CString RightAdmin::changeUserRight(CString strUser, CString strRight) { CoInitialize(NULL); WinHttp::IWinHttpRequestPtr ptrHttp = nullptr; ptrHttp.CreateInstance(__uuidof(WinHttp::WinHttpRequest)); if (nullptr == ptrHttp) { return L""; } ptrHttp->Open(L"POST", STRING_RIGHT_HOST_ADDRESS); ptrHttp->SetRequestHeader(L"User-Agent", L" Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 50.0.2661.102 Safari / 537.36"); ptrHttp->SetRequestHeader(L"Content-Type", L"application/x-www-form-urlencoded"); ptrHttp->SetRequestHeader(L"Cookie", this->getSession().GetBuffer()); CString strPostData = L"username=" + strUser + L"&rightstr=" + strRight; ptrHttp->Send(strPostData.GetBuffer()); strPostData.ReleaseBuffer(); CoUninitialize(); CString strRet = ptrHttp->GetResponseText(); return strRet; } CString RightAdmin::getRightNameList() { CoInitialize(NULL); WinHttp::IWinHttpRequestPtr ptrHttp = nullptr; ptrHttp.CreateInstance(__uuidof(WinHttp::WinHttpRequest)); if (nullptr == ptrHttp) { return L""; } CString strGetUrl = L""; strGetUrl.Format(L"%s?getrightname=1", STRING_RIGHT_HOST_ADDRESS); ptrHttp->Open(L"GET", strGetUrl.GetBuffer()); strGetUrl.ReleaseBuffer(); ptrHttp->SetRequestHeader(L"User-Agent", L" Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 50.0.2661.102 Safari / 537.36"); ptrHttp->SetRequestHeader(L"Content-Type", L"application/x-www-form-urlencoded"); ptrHttp->SetRequestHeader(L"Cookie", this->getSession().GetBuffer()); ptrHttp->Send(); CoUninitialize(); CString strRet = ptrHttp->GetResponseText(); return strRet; }
生成继承 CDialogEx 的 RightDlg类,然后修改该类让它再继承刚刚写好 RightAdmin类
为对话框资源添加控件
为了不让程序在载入时卡死,所以将获取权限列表的操作放入线程中。
DWORD WINAPI getRightListProc(LPVOID lpParameter) { RightDlg* ptrDlg = (RightDlg*)lpParameter; ptrDlg->m_RightList.DeleteAllItems(); CString strListText = L""; CString strBuffer = L""; int cnt = 0; do { strBuffer = ptrDlg->getRightList(cnt, 1); if (strBuffer != L"") { CString strUser = L""; CString strRight = L""; int npos = strBuffer.Find(L"|"); if (npos != -1) { strUser = strBuffer.Mid(0, npos); strRight = strBuffer.Mid(npos + 1, strBuffer.GetLength() - npos - 1); int nRow = ptrDlg->m_RightList.InsertItem(0, strUser); ptrDlg->m_RightList.SetItemText(nRow, 1, strRight); } } cnt++; } while (strBuffer != L""); return 0; }
调用方式:
::CreateThread(0, 0, (LPTHREAD_START_ROUTINE)getRightListProc, this, 0, 0);
MFC 端对话框部分代码:
// RightDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "ManagementSystem.h"
#include "RightDlg.h"
#include "afxdialogex.h"
#include "ChangeInfomation.h"
#include <regex>
// RightDlg 对话框
IMPLEMENT_DYNAMIC(RightDlg, CDialogEx)
RightDlg::RightDlg(CString strUser, CString strSession, CWnd* pParent /*=NULL*/)
: CDialogEx(RightDlg::IDD, pParent), RightAdmin(strUser, strSession)
, m_strQueryUser(_T(""))
, m_strUserSet(_T(""))
{
}
RightDlg::~RightDlg()
{
}
void RightDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_RIGHT, m_RightList);
DDX_Text(pDX, IDC_EDIT_RIGHT_USER, m_strQueryUser);
DDX_Text(pDX, IDC_EDIT_USER_SET_RIGHT, m_strUserSet);
DDX_Control(pDX, IDC_COMBO_RIGHT_LIST, m_setRightList);
DDX_Control(pDX, IDC_COMBO_RIGHT_SELECT, m_SelectListBox);
DDX_Control(pDX, IDC_BTN_SELECT, m_SelectBTN);
}
BEGIN_MESSAGE_MAP(RightDlg, CDialogEx)
ON_COMMAND(ID_ChangeInfo, &RightDlg::OnChangeinfo)
ON_NOTIFY(NM_CLICK, IDC_LIST_RIGHT, &RightDlg::OnNMClickListRight)
ON_BN_CLICKED(IDC_BTN_QUERY, &RightDlg::OnBnClickedBtnQuery)
ON_BN_CLICKED(IDC_BTN_UNSET_RIGHT, &RightDlg::OnBnClickedBtnUnsetRight)
ON_BN_CLICKED(IDC_BTN_SET_RIGHT, &RightDlg::OnBnClickedBtnSetRight)
ON_BN_CLICKED(IDC_BTN_SELECT, &RightDlg::OnBnClickedBtnSelect)
END_MESSAGE_MAP()
// RightDlg 消息处理程序
void RightDlg::OnChangeinfo()
{
// TODO: 在此添加命令处理程序代码
ChangeInfomation changeInfo(this->getUser(), this->getSession());
changeInfo.DoModal();
}
DWORD WINAPI getRightListProc(LPVOID lpParameter) { RightDlg* ptrDlg = (RightDlg*)lpParameter; ptrDlg->m_RightList.DeleteAllItems(); CString strListText = L""; CString strBuffer = L""; int cnt = 0; do { strBuffer = ptrDlg->getRightList(cnt, 1); if (strBuffer != L"") { CString strUser = L""; CString strRight = L""; int npos = strBuffer.Find(L"|"); if (npos != -1) { strUser = strBuffer.Mid(0, npos); strRight = strBuffer.Mid(npos + 1, strBuffer.GetLength() - npos - 1); int nRow = ptrDlg->m_RightList.InsertItem(0, strUser); ptrDlg->m_RightList.SetItemText(nRow, 1, strRight); } } cnt++; } while (strBuffer != L""); return 0; }
BOOL RightDlg::OnInitDialog()
{
__super::OnInitDialog();
// TODO: 在此添加额外的初始化
CRect rect;
m_RightList.GetClientRect(&rect);
m_RightList.SetExtendedStyle(m_RightList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 增加全行选中和表格线
AfxOleInit(); // 防止发生错误
m_RightList.InsertColumn(0, L"用户名", LVCFMT_CENTER, rect.Width() / 2, 0);
m_RightList.InsertColumn(1, L"权限", LVCFMT_CENTER, rect.Width() / 2, 1);
::CreateThread(0, 0, (LPTHREAD_START_ROUTINE)getRightListProc, this, 0, 0);
CString strRet = this->getRightNameList();
int index = 0;
int nCount = 0;
int nSearch = 0;
while ((nSearch = strRet.Find(L"|", index)) != -1 || index < strRet.GetLength())
{
if (-1 == nSearch)
{
m_setRightList.InsertString(nCount, strRet.Mid(index, strRet.GetLength() - index));
m_SelectListBox.InsertString(nCount, strRet.Mid(index, strRet.GetLength() - index));
index = strRet.GetLength();
nCount++;
}else {
m_setRightList.InsertString(nCount, strRet.Mid(index, nSearch - index));
m_SelectListBox.InsertString(nCount, strRet.Mid(index, nSearch - index));
index = nSearch + 1;
nCount++;
}
}
m_SelectListBox.InsertString(nCount, L"All");
m_setRightList.SetCurSel(0);
m_SelectListBox.SetCurSel(nCount);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void RightDlg::OnNMClickListRight(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
int nItem = m_RightList.GetSelectionMark();
if (0 != m_RightList.GetSelectedCount())
{
m_strUserSet = m_RightList.GetItemText(nItem, 0);
UpdateData(FALSE);
}
*pResult = 0;
}
void RightDlg::OnBnClickedBtnQuery()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (m_strQueryUser.GetLength() < 2 || m_strQueryUser.GetLength() > 20)
{
MessageBox(L"账号格式输入错误!", L"Info", MB_OK | MB_ICONSTOP);
return;
}
LVFINDINFO info;
info.flags = LVFI_STRING;
info.psz = m_strQueryUser;
int index = 0;
if ((index = m_RightList.FindItem(&info)) != -1)
{
int nItem = m_RightList.GetSelectionMark();
m_RightList.SetItemState(nItem, 0, -1);
m_RightList.SetItemState(index, LVNI_FOCUSED | LVIS_SELECTED, LVNI_FOCUSED | LVIS_SELECTED);
m_RightList.SetFocus();
m_strUserSet = m_RightList.GetItemText(index, 0);
UpdateData(FALSE);
} else {
int nItem = m_RightList.GetSelectionMark();
m_RightList.SetItemState(nItem, 0, -1);
m_strUserSet = m_RightList.GetItemText(-1, 0);
UpdateData(FALSE);
MessageBox(L"没有找到该用户名!", L"Info", MB_OK | MB_ICONINFORMATION);
}
int nItem = m_RightList.GetSelectionMark();
int AllItemNumber = m_RightList.GetTopIndex();
CRect rc;
m_RightList.GetItemRect(AllItemNumber, rc, LVIR_BOUNDS);
CSize sz(0, (nItem - AllItemNumber) * rc.Height());
m_RightList.Scroll(sz);
}
void RightDlg::OnBnClickedBtnUnsetRight()
{
UpdateData(TRUE);
if (m_strUserSet.GetLength() < 2 || m_strUserSet.GetLength() > 20)
{
MessageBox(L"账号格式输入错误!", L"Info", MB_OK | MB_ICONSTOP);
return;
}
CString strRet = this->changeUserRight(m_strUserSet, L"delete");
if (strRet != L"")
{
MessageBox(strRet, L"Info", MB_OK | MB_ICONINFORMATION);
}
else {
MessageBox(L"出现未知错误!", L"Info", MB_OK | MB_ICONSTOP);
}
::CreateThread(0, 0, (LPTHREAD_START_ROUTINE)getRightListProc, this, 0, 0);
}
void RightDlg::OnBnClickedBtnSetRight()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (m_strUserSet.GetLength() < 2 || m_strUserSet.GetLength() > 20)
{
MessageBox(L"账号格式输入错误!", L"Info", MB_OK | MB_ICONSTOP);
return;
}
CString strRight = L"";
m_setRightList.GetLBText(m_setRightList.GetCurSel(), strRight);
CString strRet = this->changeUserRight(m_strUserSet, strRight);
if (strRet != L"")
{
MessageBox(strRet, L"Info", MB_OK | MB_ICONINFORMATION);
} else {
MessageBox(L"出现未知错误!", L"Info", MB_OK | MB_ICONSTOP);
}
::CreateThread(0, 0, (LPTHREAD_START_ROUTINE)getRightListProc, this, 0, 0);
}
void RightDlg::OnBnClickedBtnSelect()
{
// TODO: 在此添加控件通知处理程序代码
CString strSelect = L"";
m_SelectListBox.GetLBText(m_SelectListBox.GetCurSel(), strSelect);
if (L"All" == strSelect)
{
::CreateThread(0, 0, (LPTHREAD_START_ROUTINE)getRightListProc, this, 0, 0);
} else {
strSelect += "\n";
for (int i = m_RightList.GetItemCount(); i >= 0; i--)
{
CString tmp = m_RightList.GetItemText(i, 1);
if (m_RightList.GetItemText(i, 1) != strSelect)
{
m_RightList.DeleteItem(i);
}
}
}
}
2.php端
right.php
<?php require_once("db_info.php"); $rightstr = $_SESSION['rightstr']; $start = $_GET['start']; $limit = $_GET['limit']; $getlist = $_GET['getrightname']; $username = $_POST['username']; $right = $_POST['rightstr']; if( $rightstr == 'administrator' or $rightstr == 'right_admin') { if (!is_null($start) and !is_null($limit)) { $sql_count = "SELECT * FROM privilege"; if ($limit === '-1') { $sql = mysqli_query($con, $sql_count); while ($row = mysqli_fetch_array($sql)) { echo $row['username']."|".$row['rightstr'] . "\n"; } } else { if ($limit > 0) { $sql = mysqli_query($con, $sql_count); $number = mysqli_num_rows($sql); $pagesize = $limit; $row_start = $start * $limit; $sql_rightstr = "SELECT * FROM privilege LIMIT $row_start, $pagesize"; $sql_result = mysqli_query($con, $sql_rightstr); while ($row = mysqli_fetch_array($sql_result)) { echo $row['username'] . "|" . $row['rightstr'] . "\n"; } } } } else if (!is_null($getlist) and $getlist == '1') { for ($var = 0; $var < count($right_arr); $var++) { echo $right_arr[$var]; echo ($var == count($right_arr) - 1) ? '' : '|'; } } else if (!is_null($username)) { $sql_is_username_exist = "SELECT * FROM privilege WHERE username = '$username'"; $mysql_result = mysqli_query($con, $sql_is_username_exist); $flag = false; for ($var = 0; $var < count($right_arr); $var++) { if ($right_arr[$var] == $right) { $flag = true; } } if ($right === 'delete') { $sql_query = "DELETE FROM privilege WHERE username = '$username'"; $flag = true; } else if ($flag and mysqli_num_rows($mysql_result) < 1) { $sql_query = "INSERT INTO privilege(username, rightstr) VALUES ('$username', '$right')"; } else if ($flag) { $sql_query = "UPDATE privilege SET rightstr = '$right' WHERE username = '$username'"; } if ($flag) { $sql_change_result = mysqli_query($con, $sql_query); echo "SUCCEED|Change right is succeed!"; } } } else { echo "FAILED|您的权限不足!"; }
在 db_info.php 中添加代码
global $right_arr; $right_arr = array('administrator', 'cook', 'order_admin', 'right_admin');
运行时截图:
快考试了,可能更新不会这么快了O(∩_∩)O
相关文章推荐
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:7.管理员专属及用户管理模块(The End)
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:5.菜单管理模块
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:6.订单管理模块
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:2.登陆功能的实现
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:1.项目工具准备篇
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:3.MFC端Person类及个人信息修改
- 基于Servlet+JDBC+Bootstrap+MySQL+AJAX权限管理系统项目实战教程
- 软件项目管理系统:项目资料模块权限分配设计文档
- 【php+mysql】安乐业房产管理系统1.6(橙色经典页面)
- PHP+MYSQL的文章管理系统(二)
- 权限管理系统(用户信息管理模块业务组件实现代码,带注解)
- 建站推荐十个免费的CMS内容管理系统(Php+mysql)
- 自制上网管理系统PHP+Mysql+iptables on linux
- 【转】win2003系统下apache、php、mysql安装以及虚拟主机和目录权限设置
- Testlink+Apache+PHP+MySQL测试管理系统搭建
- (01)大型信息化系统组件 - 通用权限管理模块整体开发定位
- C#.NET控制模块菜单的访问权限(走火入魔通用权限管理系统组件在信息管理系统中的用处)
- PHP MYSQL的文章管理系统
- 朗志轻量级项目管理解决方案-RBAC角色权限模块介绍
- RedGlove 权限管理系统(2)-功能模块设计