【发布时间】:2019-03-16 10:01:08
【问题描述】:
我构建了一个运行良好的网络表单,它可以写回我的 SQL 数据库,但现在我需要跟踪进行更改的人的用户 ID。我是一名 SQL 开发人员,所以有点超出我的知识范围。
我的 .aspx 文件有
<InsertParameters>
.....
<asp:Parameter Name="StaffId" Type="String" DefaultValue= "Anonymous"/>
我的 .aspx.cs 文件如下所示:
public partial class _BLAHBLAHBLAH_Topic1 : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["UserPermission"] = null;
string username = User.Identity.Name;
if (username.StartsWith("ABC\\"))
username = username.Remove(0, 4);
bool[] userPermssion = GetUserPermissions(username);
if(!userPermssion[0])
{
ASPxGridView1.Visible = false;
WarningLabel.Visible = true;
}
}
}
private bool[] GetUserPermissions(string username)
{
bool canView = false;
bool canUpdate = false;
bool canDelete = false;
bool canInsert = false;
try
{
PermissionDataSet.UserPermissionsDataTable userDataTable = new PermissionDataSet.UserPermissionsDataTable();
PermissionDataSetTableAdapters.UserPermissionsTableAdapter adapter = new PermissionDataSetTableAdapters.UserPermissionsTableAdapter();
adapter.Fill(userDataTable, username);
if (userDataTable != null)
{
if (userDataTable.Rows.Count == 1)
{
canView = Convert.ToBoolean(userDataTable.Rows[0]["ViewFlag"]);
canUpdate = Convert.ToBoolean(userDataTable.Rows[0]["UpdateFlag"]);
canDelete = Convert.ToBoolean(userDataTable.Rows[0]["DeleteFlag"]);
canInsert = Convert.ToBoolean(userDataTable.Rows[0]["InsertFlag"]);
}
}
}
catch(Exception ex)
{
//unable to retrieve permissions - all values are defaulted to false
}
bool[] userPermission = new bool[] { canView, canUpdate, canDelete, canInsert };
Session["UserPermission"] = userPermission;
return userPermission;
}
protected void ASPxGridView1_CommandButtonInitialize(object sender, ASPxGridViewCommandButtonEventArgs e)
{
if (Session["UserPermission"] != null)
{
bool[] permission = (bool[])Session["UserPermission"];
switch (e.ButtonType)
{
case ColumnCommandButtonType.Edit:
e.Visible = permission[1];
break;
case ColumnCommandButtonType.Delete:
e.Visible = permission[2];
break;
case ColumnCommandButtonType.New:
e.Visible = permission[3];
break;
}
}
else
{
switch (e.ButtonType)
{
case ColumnCommandButtonType.Edit:
e.Visible = false;
break;
case ColumnCommandButtonType.Delete:
e.Visible = false;
break;
case ColumnCommandButtonType.New:
e.Visible = false;
break;
}
}
}
}
我想我需要放一个
protected void Page_Init(object sender, EventArgs e)
{
DataSource.SelectParameters["StaffId"].DefaultValue = User.Identity.Name;
}
代码 sn-p 在那里某处,但我真的不确定在哪里或如何,所以任何建议都会非常感激。
谢谢
【问题讨论】:
-
您的意思是要将用户名写入数据库?这是一个宽泛的问题,因为所有这些代码都是从数据库中读取的,所以你实际上是在要求我们为你编写所有代码。作为一个通用架构,我认为我会放弃 GetUserPermission 并创建我要执行的操作的存储过程(UpdateCustomerDetails),我将传入新的客户详细信息和员工用户名,SP 将检查权限,写入审计日志并更新客户。 ASP.net 应用程序可以被空心化为只调用存储过程的东西
-
谢谢@CaiusJard,不,我没想到你会为我编写所有代码,我为网站提供的代码在授予访问权限之前检查用户对数据库的权限,并使用更新数据库在网络表单中所做的所有更改。我只是在寻找有关如何在进行其余表单更改的同时将员工用户名写入数据库的建议,而不是我们目前拥有的硬编码用户名。无论如何,感谢您抽出宝贵时间回复。
标签: sql asp.net parameter-passing