使用 STT(SQL 表工具包) 的登录模块






4.73/5 (3投票s)
创建登录对话框并使用 STT 管理所有用户。
引言
SQL Table Toolkit
是一个类库,提供了大量用于快速便捷地处理 SQL 表的工具。您可以在 这里 找到更多关于它的信息。在那篇文章中,我们解释了 STT 的主要功能和用法。我建议大家首先阅读主文章,然后再继续阅读本文,因为演示应用程序也延续了主文章中创建的应用程序。
STT 使用默认表来管理所有用户并提供登录对话框。所有用户权限和表设置也保存在 STT 的默认表中。在主 STT 文章中,我们展示了表更改协议也使用集成的用户管理来保存谁进行了什么更改。
要创建一个拥有处理 SQL 表和创建类似 ERP 系统所有功能的 DLL 库,用户管理是必不可少的。它不是一个高级安全功能,但对于快速应用程序部署来说是一个有用的工具。
背景
在 STT 开发的初期,就需要一个用户登录和用户管理模块来满足我们公司的所有需求。大部分功能都与用户 ID 相关,例如更改协议、菜单权限、表列设置……
对于密码检查,我们使用 STT 集成的过滤器和数据处理功能。
使用代码
为了展示登录是如何工作的,我们将继续在 STT 的主文章的结尾处进行。在那里,我们有一个包含一个表的演示应用程序。但是,当我们更改表中的数据时,我们不知道是哪个用户进行的更改。现在我们将展示我们如何使用代码来登录用户。之后,我们将演示如何获取用户数据或权限,以及如何管理用户权限和数据。
显示登录对话框
STT 旨在快速开发,因此要检查用户是否已登录,我们只使用一个静态布尔参数来运行登录对话框。
User.UserSuccessfullyLoged
该属性 说明了 我们所需的一切。如果用户 成功 登录,则返回true
,否则返回false
。
现在我们将把登录代码添加到主文章中的演示应用程序中,看看它是如何工作的。我们在演示应用程序的Program.cs
文件中只更改一行代码。
if (!User.UserSuccessfullyLoged)
return;
整个Program.cs
文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using STT;
using System.Reflection;
namespace STTDemoProject
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
SQLConnectionForm frmConnection = new SQLConnectionForm(Properties.Settings.Default.Connection);
frmConnection.ShowDialog();
if (frmConnection.DialogResult != DialogResult.OK)
return;
Properties.Settings.Default.Connection = frmConnection.ConnectionString;
Properties.Settings.Default.Save();
Initialization.Start(Assembly.Load("STT"), Properties.Settings.Default.Connection);
Initialization.Start(Assembly.Load("STTDemoProject"), Properties.Settings.Default.Connection);
Language.SetLanguage(Languages.EN);
//Leave the application if user did not log successfully
if (!User.UserSuccessfullyLoged)
return;
Application.Run(new Form1());
}
}
}
通过启动演示应用程序(在 成功 连接到数据库后),我们将看到一个登录对话框。
未经任何用户调整,它将只显示一个可用用户“Backup_Passw:123”。如果 STT 未识别任何其他用户,则会自动添加该用户。如图所示,该用户的密码是“123”。稍后可以在用户管理中更改该用户。
获取当前用户的数据
要获取当前用户的 ID,只需调用此代码。
User.ID;
要获取用户是否为管理员的信息,我们使用此代码。
User.IsAdmin
它会返回一个 布尔 值,显示用户是否为管理员。
管理用户
为了管理我们的用户,我们只需在 STT 集成的表中显示它们。我们将在我们的演示 应用程序 中演示这一点。演示应用程序的启动位置是我们上次在 STT 主文章 结束的地方。
我们要做的第一件事是创建一个主窗体,我们可以在打开应用程序并登录用户后从中选择要执行的操作。我们将该窗体命名为MainForm
。
在该窗体上,我们添加一个名为btnTable1
的按钮,并添加一个OnClick
事件,以便在单击该按钮时打开我们的Table1
。因为Table1
仍然在 Form1 中,所以我们保持窗体名称不变。
private void btnTable1_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.Show();
}
下一步是告知应用程序我们希望MainForm
作为应用程序的启动窗体。我们通过更改Program.cs
文件中的代码来实现此目的。
部分
Application.Run(new Form1());
保持不变,我们将其更改为
Application.Run(new MainForm());
现在,如果我们打开应用程序并登录,就会显示此窗体。
通过单击Table1
按钮,将显示包含演示表Table1
的窗体。
为了管理我们的用户,我们还需要一个窗体来在 DataGridView 中显示用户表。为此,我们创建一个窗体并将其命名为UsersForm
。就像在 STT 主文章 中一样,我们初始化 Users 表并将其绑定到我们先前添加到窗体的dataGridView1
。UsersForm
的完整代码如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using STT;
namespace STTDemoProject
{
public partial class UsersForm : Form
{
Users tblUsers = new Users();
public UsersForm()
{
InitializeComponent();
tblUsers.BindTableToDataGridView(dataGridView1);
}
}
}
为了访问Users
表,我们需要设置
using STT;
现在,我们需要在MainForm
中添加第二个按钮,用它来打开UsersForm
。为此,我们添加第二个按钮并将其命名为btnUsers
。对于这个按钮,我们还添加了一个OnClick
事件,代码如下。
private void btnUsers_Click(object sender, EventArgs e)
{
UsersForm frmUsers = new UsersForm();
frmUsers.Show();
}
现在,如果我们启动应用程序、登录并单击 Users 按钮,我们将看到我们的用户表。
在该表中,我们可以添加任意数量的用户。更改他们的权限、姓名、密码等……我们将保留默认用户不变。
用户权限
通过操作用户表,您会注意到该列是一个 ComboBox 列,其中包含可能的用户权限。STT 会自动 添加“Administrator”权限(如果表为空)。此权限也设置为启动时的默认用户“Backup_Passw:123”。稍后在另一篇文章中,我们将展示如何调整 ComboBoxes 和数据源,无论我们在哪里调用它们,它们都将被集成到表中。
现在我们希望管理我们的用户权限,以便我们的应用程序中不只有管理员。为此,我们创建一个新的窗体来显示它们,并将其命名为 PermissionsForm。与UsersForm
一样,我们在此窗体中添加一个 DataGridView,初始化我们的PermissionGroups
表,并将其绑定到该 DataGridView。别忘了使用 STT。完整代码如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using STT;
namespace STTDemoProject
{
public partial class PermissionsForm : Form
{
PermissionGroups tblPermissionGroups = new PermissionGroups();
public PermissionsForm()
{
InitializeComponent();
tblPermissionGroups.BindTableToDataGridView(dataGridView1);
}
}
}
我们还需要在MainForm
中添加第三个按钮,用它来打开我们的用户权限。我们将它命名为btnPermissions
,并添加一个 OnClick 事件,代码如下。
private void btnPermissions_Click(object sender, EventArgs e)
{
PermissionsForm frmPermissions = new PermissionsForm();
frmPermissions.Show();
}
现在,如果我们打开应用程序、登录并按“权限”按钮,我们将看到此表。
在该表中,我们可以看到我们可以管理我们的权限名称。我们可以设置权限是否具有管理员权限,添加描述和默认权限。
现在,执行所有这些操作而无需我们为应用程序设置的任何功能似乎都很顺利。STT 拥有一个集成的 TreeView 权限适配器,允许我们将权限添加到 TreeView 菜单。我们将在另一篇文章中介绍这一点,届时我们将展示如何实现一个 TreewView,它可以在 TabControl 中打开窗体。
默认权限列也是一个 ComboBox,但其自定义源无法更改,因为它只能有 4 个可能的值。
现在我们的MainForm
已完成,让我们来看看完整的代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace STTDemoProject
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnTable1_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.Show();
}
private void btnUsers_Click(object sender, EventArgs e)
{
UsersForm frmUsers = new UsersForm();
frmUsers.Show();
}
private void btnPermissions_Click(object sender, EventArgs e)
{
PermissionsForm frmPermissions = new PermissionsForm();
frmPermissions.Show();
}
}
}
用户限制演示
让我们创建一个新的权限并称之为“Normal”(不勾选 Admin),然后创建一个用户并命名为“User1”,并将该用户的权限设置为“Normal”,密码随意。假设我们不希望普通用户能够管理权限和用户表,而只有管理员用户才能这样做,无论是什么类型的管理员。在此演示应用程序中,我们只需隐藏 Users 和 Permission 按钮,如果登录用户不是管理员用户。让我们再次回到主窗体,并将此代码添加到其初始化部分。
btnUsers.Visible = User.IsAdmin;
btnPermissions.Visible = User.IsAdmin;
不要忘记 `using STT`!每次我们要访问 User 类时都需要它。
整个MainForm
代码将如下所示。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using STT;
namespace STTDemoProject
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
btnUsers.Visible = User.IsAdmin;
btnPermissions.Visible = User.IsAdmin;
}
private void btnTable1_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.Show();
}
private void btnUsers_Click(object sender, EventArgs e)
{
UsersForm frmUsers = new UsersForm();
frmUsers.Show();
}
private void btnPermissions_Click(object sender, EventArgs e)
{
PermissionsForm frmPermissions = new PermissionsForm();
frmPermissions.Show();
}
}
}
现在,如果我们打开应用程序并使用默认用户登录,我们将看到所有按钮。但是,如果我们使用具有普通 权限 的新用户 User1 登录,我们将只看到Table1
按钮。
这种限制我们可以用来 分隔 非管理员用户与敏感数据,而无需在 ERP 应用程序中 手动 管理用户权限。
关注点
在本文中,我们展示了 STT 库的用户和用户权限管理的主要功能。演示应用程序仅用于 演示 目的,并且没有 努力 使其看起来 更好 或像一个“真实的”应用程序。在下一篇文章中,我们将展示如何集成 TreeView 和 TabControl 以利用我们的用户权限,并使我们的演示应用程序看起来像一个可用于生产的应用程序的准备好的框架。之后,我们将展示更多关于创建 ComboBoxes 和将表单控件绑定到 STT 表列的内容。
限制
STT 登录模块仅用于前端的用户 分隔。它不是一个 严肃的 安全功能!
历史
2015 年 3 月 19 日 - 首次发布。