繁体   English   中英

获取登录用户信息

[英]Getting logged in user info

到目前为止,这是我的代码:

private void loginbtn_Click(object sender, EventArgs e)
    {
        CRUD.cmd = new NpgsqlCommand("SELECT COUNT(*) FROM users WHERE username = '" + txtuser.Text + "' AND password = '" + txtpass.Text + "'", CRUD.con);
        NpgsqlDataAdapter da = new NpgsqlDataAdapter();
        DataTable dt = new DataTable();
        da.SelectCommand = CRUD.cmd;
        da.Fill(dt);

        if (dt.Rows[0][0].ToString() == "1")
        {
            Welcome welcome = new Welcome();
            welcome.Show();

            this.Hide();
        }
        else
        {
            MessageBox.Show("Username or password incorrect, try again.",
                "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            txtpass.Clear();
            txtuser.Clear();
            txtuser.Focus();

        }
        if (RememberMe.Checked)
        {
            Properties.Settings.Default.UserName = txtuser.Text;
            Properties.Settings.Default.Password = txtpass.Text;
            Properties.Settings.Default.Save();
        }
    }

我知道我应该使用 SQL 参数,但这是一个安全的本地环境。 我的问题是,如何检索当前登录的用户的信息? 我需要它,所以当用户对 SQL 表执行 INSERT 方法时,我想知道哪个用户输入了该条目或哪个用户删除了它。 还将用户信息与 INSERT 方法的 rest 一起添加到 2 个附加列(用户 ID 和通行证)。

编辑:

我这里有一个小的 windows 表单应用程序,带有一个 datagridview (DGV) 和几个文本字段,可以通过按钮将值插入到表中,然后将该信息显示到 DGV,还可以删除行。 我制作了 Form2,因此用户必须先登录才能访问 Form1(DGV 表单)。 我要做的就是以某种方式保存该用户信息,并且每当他对 DGV 进行更改时,将他的凭据添加到他所做的条目旁边的表中的 2 个额外列中。

知道谁登录

谁登录了windows机器

如果您指的是谁登录到例如。 Windows 机器,您可以使用Environment.UserName之类的东西。

自定义解决方案/数据库

如果它是您自己的“登录”解决方案/数据库,那么这是您需要添加的功能。 它通常在自己的服务器上使用众所周知的库完成,而不是“手写”,但对于您的测试项目的粗略/不安全示例,您可以使用Properties.Settings ,例如:

/* "Logging in" */
if (password == databaseUser.Password) {
    Properties.Settings.Default.myLoggedInUserId = databaseUser.Id;
    Properties.Settings.Default.myLoggedInUserName = databaseUser.Name;
}

/* "Logging out" */
Properties.Settings.Default.myLoggedInUserId = null;
Properties.Settings.Default.myLoggedInUserName = null;

哪个用户创建/编辑了一行

这通常通过向表中添加其他字段来实现,例如。 CreatedDateCreatedBy

var sqlText = "INSERT INTO MyTableName(Name, CreationDate, CreatedBy) VALUES (@Name, @CreatedDate, @CreatedBy);";
var command = new SqlCommand(sqlText, connection);

command.Parameters.Add("@Name", name);
command.Parameters.Add("@CreatedDate", DateTime.UtcNow);
command.Parameters.Add("@CreatedBy", myLoggedInUserName);

对于谁编辑了一行,请考虑“修改日期”和“修改者”列。

谁删除了一行

这可以通过以下方式完成:

  • 操作成功后手动INSERT ing到另一个表中(听起来像你有)

     DELETE FROM Users WHERE UserId = @UserId; INSERT INTO MyLoggingTable(LogMessage, LoggedInUserId) VALUES(@Message, @LoggedInUserId);
  • 当与上述“修改日期”/“修改者”列结合使用时,使用“软删除”通过设置属性而不是 SQL DELETE来删除,例如users.Active

     --List all active users SELECT * FROM users WHERE users.Active = 1; --Delete a user UPDATE users SET Active = 0 WHERE UserId = @UserId; --Who deleted a user (assuming you can't edit a deleted user) SELECT users.ModifiedBy FROM users WHERE users.UserId = @Id;
  • 类似于上面的部分,但添加了“删除日期”和“删除者”列(如果仍然可以修改“非活动”的内容,则可能需要)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM