Asp.net 动态数据安全微调
在使用动态数据时,是否有一种方法只允许用户查看包含其名称/id的记录。这意味着当他们过滤数据时,只显示他们的信息,而不是每个用户。关于动态数据中的安全实现,我想向您推荐一本由Oleg Sych发行的优秀书籍ASP.NET动态数据 至于您的情况,据我所知,您需要在GridViewon List.aspx页面中仅显示包含当前登录用户id或姓名的记录Asp.net 动态数据安全微调,asp.net,asp.net-dynamic-data,Asp.net,Asp.net Dynamic Data,在使用动态数据时,是否有一种方法只允许用户查看包含其名称/id的记录。这意味着当他们过滤数据时,只显示他们的信息,而不是每个用户。关于动态数据中的安全实现,我想向您推荐一本由Oleg Sych发行的优秀书籍ASP.NET动态数据 至于您的情况,据我所知,您需要在GridViewon List.aspx页面中仅显示包含当前登录用户id或姓名的记录 让我们考虑最简单的方法来解决你的问题,保持动态数据方法。 让我们假设,在不考虑用户如何访问您的动态数据站点的情况下,我们在List.aspx的代码隐藏中
让我们考虑最简单的方法来解决你的问题,保持动态数据方法。
让我们假设,在不考虑用户如何访问您的动态数据站点的情况下,我们在List.aspx的代码隐藏中获得了用户Id。为简单起见,假设我们的表包含用户Id List.aspx.cs(部分) 然后,我们应该使用特殊的非可视控件QueryXtender,并使用TargetControlID属性将其与基于LINQ的数据源控件相关联(假设在这种情况下我们有EntityDataSource) List.aspx(部分)
编辑:
基于这一简单的解决方案,并取决于在动态数据站点中实现路由,您应该使用Details.aspx页面和Edit.aspx页面上的自定义LINQ,以便用户无法通过查询字符串访问非自己的记录
public partial class List : System.Web.UI.Page
{
protected int userId;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
userId = GetLoggedUser();
}
}
}
<asp:GridView
ID="gvTest"
runat="server"
DataSourceID="DetailsDataSourceTest"
AllowPaging="true"
AllowSorting="false"
PageSize="10"
CssClass="gridview"
AutoGenerateColumns="false">
<Columns>
<asp:DynamicField DataField="UserId" />
<asp:DynamicField DataField="Col1" />
<asp:DynamicField DataField="Col2" />
<asp:DynamicField DataField="Col3" />
</Columns>
</asp:GridView>
<asp:EntityDataSource
ID="DetailsDataSourceTest"
runat="server"
ConnectionString="name=TestEntities"
DefaultContainerName="TestEntities"
EnableFlattening="false"
EntitySetName="TableTestName" />
<asp:QueryExtender
ID="QueryExtenderTest"
runat="server"
TargetControlID="DetailsDataSourceTest">
<asp:CustomExpression OnQuerying="QueryExtenderTest_Querying" />
</asp:QueryExtender>
protected void QueryExtenderTest_Querying(object sender, System.Web.UI.WebControls.Expressions.CustomExpressionEventArgs e)
{
if (/* check userId if you would like */)
{
e.Query = (from c in e.Query.Cast<TableTestName>()
where (c.UserId == userId)
select c);
}
}