【发布时间】:2015-09-22 18:45:16
【问题描述】:
我正在主线一个asp.net项目,这个项目是在IIS中配置的。该网站对所有人开放,当我查看 asp.net 页面中的代码时,其检查窗口登录“企业 ID”并允许所有用户查看所有 aspx 页面。
现在,我的管理团队要求我们限制那些低于初级员工的人员。(初级工程师、开发人员、软件工程师)。
我已经编写了查询,传递企业 id 并验证等级,如果是初级级别,则返回“0”值,否则返回“1”值。
我的问题是,我不想去编辑每个页面并检查此查询并限制每个页面。
您能否建议,我怎样才能实施最简单和最好的方法来限制用户。
谢谢, -------------------------------------- 2015 年 9 月 24 日更新
Index.aspx
protected void Page_Load(object sender, EventArgs e)
{
string UserStatus = UtilFunctions.ValidateUser();
Response.Write(UserStatus);
if (UserStatus == "0")
{
Response.Write("<div><font color=red><h1>You are not authorized to view this page</h1></font></div>");
Response.End();
}
}
Utilifunctions.cs
public static String ValidateUser()
{
string CurrentUser = getLoggedOnUser();
using (System.Data.SqlClient.SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString))
{
using (SqlCommand myCommand = myConnection.CreateCommand())
{
myConnection.Open();//Opens the Connection
myCommand.CommandText = "Select Permission From Temp_Validate Where EnterpriseId='" + CurrentUser + "'";
SqlDataReader IDReader = myCommand.ExecuteReader(); //Gets the ID
IDReader.Read();
string UserStatus = IDReader["Permission"].ToString();
IDReader.Close();
return UserStatus;
}
}
我在我的 index.aspx 页面中实现了上述功能,如果 userstatus 等于 "0" ,它将显示“您无权查看此消息”并结束。
我有大约 30 个 aspx 页面,它目前在生产中运行。我不想在每个页面加载中都包含相同的代码(index.aspx)来停止用户验证。
您能否建议我如何在不编辑所有页面的情况下实施。
09/28 更新:Utilifunction.cs
public static String getLoggedOnUser()
{
String user = HttpContext.Current.User.Identity.Name.Substring(HttpContext.Current.User.Identity.Name.IndexOf("\\") + 1);
if (user == "") user = "anonymous";
string UserStatus = IsValidUser(user);
if (UserStatus == "0")
{
HttpContext.Current.Response.Redirect("PSF_Error.aspx", true);
}
return user;
}
public static String IsValidUser(string currentUser)
{
using (System.Data.SqlClient.SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Test"].ConnectionString))
{
using (SqlCommand myCommand = myConnection.CreateCommand())
{
//Gets email of the creator of current user
myConnection.Open();//Opens the Connection
myCommand.CommandText = "Select Permission From Temp_Validate Where EnterpriseId='" + currentUser + "'";
SqlDataReader IDReader = myCommand.ExecuteReader(); //Gets the ID
IDReader.Read();
string UserStatus = IDReader["Permission"].ToString();
IDReader.Close();
return UserStatus;
}
}
}
索引.aspx
Page_load
{
string CurrentUser = UtilFunctions.getLoggedOnUser();
}
【问题讨论】:
-
您从哪里获得成绩验证值?即,应用程序如何知道用户是否是初级用户?通常,应使用角色和 web.config 文件设置页面访问权限。您可以在此处看到一个类似问题的非常简单的答案:forums.asp.net/t/… 基本上,您根据逐页或目录规则设置访问权限。不过,我不确定这是否适用于您的项目。
-
我有两个表“员工”-员工 ID、姓名、职务,第二个表:职务职务 ID、姓名、级别。示例:如果我加入两个表,员工姓名:Mark,12(titleID),Contractor(Title),S4(级别),我不想在所有页面中允许 s4 级别的用户。
-
您可能想要实现您的自定义角色提供程序。一旦你设置和配置了它(在 web.config 中),你可以在后面的代码中完成它。
-
我明白了。 @achan 是对的,如果您想在业务端逻辑中处理这一切。一个更简单的选择是根据员工的级别向员工提供登录凭据(用户名和密码),但这不是大型企业的合适解决方案,也不是非常安全。我会尽力为您找到一个设置角色的好教程。