我最近开始在一个以前由其他人开发的网站上工作。该网站在asp.net上运行,虽然我非常擅长c#,但我不太了解asp.net的工作原理。
我的目标是让管理员可以使用相同的工具编辑用户的详细信息。用户编辑其详细信息时的页面。这就是这一行:
Membership.GetUser() // returns currently logged in user
返回管理员尝试编辑的常规用户,而不是返回管理员本身。如果可以的话,我可以很容易地向网站添加管理功能。
如果无法做到这一点,我将不得不在我的网站上重写各种功能,而不是:
MembershipUser user;
if (Roles.isUserInRole("admin")) {
user = Utility.GetTheUserTheAdminIsEditing();
}
else {
user = Membership.GetUser();
}
如果我必须这样做,我该如何实施Utility.GetTheUserTheAdminIsEditing()
?
目前,有一个像这样的登录功能:
private static bool _DoLogin(String user, String pass)
{
bool isAuthenticated = Membership.ValidateUser(user, pass.Trim());
if (isAuthenticated == true)
{
// Create the authentication ticket
FormsAuthenticationTicket authTicket = new
FormsAuthenticationTicket(1, // version
user, // user name
DateTime.Now, // creation
DateTime.Now.AddMinutes(60),// Expiration
false, // Persistent
""); // User data
// Now encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
// Create a cookie and add the encrypted ticket to the
// cookie as data.
HttpCookie authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);
// Add the cookie to the outgoing cookies collection.
HttpContext.Current.Response.Cookies.Add(authCookie);
FormsIdentity id = new FormsIdentity(authTicket);
// This principal will flow throughout the request.
System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, Roles.GetRolesForUser(user));
// Attach the new principal object to the current HttpContext object
HttpContext.Current.User = principal;
return true;
}
else
return false;
}
我该如何实现?
答案 0 :(得分:1)
我认为合适的解决方案是使用所有用户的列表创建一个管理员页面(仅对他可见),然后管理员可以编辑它们。
您可以将此管理页面放在站点的新文件夹中,然后使用以下行在该文件夹中创建一个web.config文件:
<system.web>
<authorization>
<allow roles="Admin"/> //Allows users in Admin role
<deny users="*"/> // deny everyone else
</authorization>
</system.web>
或者您可以将其添加到主web.config
<location path="AdminFolder">
<system.web>
<authorization>
<allow roles="Admin"/> //Allows users in Admin role
<deny users="*"/> // deny everyone else
</authorization>
</system.web>
</location>
甚至您只需显示\隐藏管理员链接Roles.isUserInRole("admin"))