=x= 🌵 网页操作权限分流处理及 Yacht Manager - Master Page 後台主版设定。
📌 关於後台的操作权限,资料库栏位的资料类型设为 bit 并且将预设值设为 ((0))
代表 False,功用是在所有使用者中,操作权限为 True 者代表老板或主管角色,只有拥有权限才可进入增删後台使用者的页面,其它由老板或主管新增的後台操作人员,因为权限较低,登入後会被导引至最常使用的新闻发布页面,并且在侧边栏不会存在使用者管理页的选项,加上配合在主版设定使用者管理页是否可见,可以做出让拥有最高权限者在初次登入时,会被导引至使用者管理页,而在网页操作时一但点选其它功能页,使用者管理页的选项将消失,唯有再次登入才会导入使用者管理页,并且利用在主版页面建立登出清除快取功能,进一步产生登出後,阻止其它人可以使用上一页看到使用者管理页的个人资讯,希望能从不同角度防止一些人为操作意外。
using System.Web;
using System.Web.Security;
namespace TayanaYachtRe.Sys
{
/// <summary>
/// CheckAccount 的摘要描述
/// </summary>
public class CheckAccount : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// ashx 里的 Request/Response 都要加上 context
string ticketUserData = ((FormsIdentity)(HttpContext.Current.User.Identity)).Ticket.UserData;
string[] ticketUserDataArr = ticketUserData.Split(';');
bool haveRight = HttpContext.Current.User.Identity.IsAuthenticated;
//依管理权限导页
if (haveRight) {
if (ticketUserDataArr[0].Equals("True")) {
//以验证票夹带资料作为限制
context.Response.Redirect("User_Manager_Cpage.aspx"); //最高管理员-跳至管理员审核页面
}
else {
context.Response.Redirect("new_list_Manager_Cpage.aspx");
}
}
else {
context.Response.Redirect("Manager_SignIn.aspx"); //导回登入页
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
protected void Page_Init(object sender, EventArgs e)
{
//清除Cache,避免登出後按上一页还会显示Cache页面
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
}
👺 清除快取要放在 Page_Init 才有效果。
🌵 使用 Visual Studio 模拟时的预设快取为 cache-control: private,类似无痕模式,仅限个别使用者使用。
👀 Page_Init 事件参考 : ASP.NET 网页存留周期概观
👺 因为执行时会先进到 Master Page 後才进到 Content Page 放在 Master Page 才可以针对每一页去清除,这样才有用。
👀 Visual Studio 的快取预设讨论 : IIS/ASP.NET responds with cache-control: private for all requests
protected void Page_Load(object sender, EventArgs e)
{
//权限关门判断 (Cookie)
if (!HttpContext.Current.User.Identity.IsAuthenticated) {
Response.Redirect("Manager_SignIn.aspx"); //导回登入页
}
else {
//取得验证票夹带资讯
string ticketUserData = ((FormsIdentity)(HttpContext.Current.User.Identity)).Ticket.UserData;
string[] ticketUserDataArr = ticketUserData.Split(';');
bool haveRight = HttpContext.Current.User.Identity.IsAuthenticated;
//依管理权限导页
if (haveRight) {
if (ticketUserDataArr[0].Equals("True")) {
//以验证票夹带资料作为限制,最高权限者使用时显示使用者管理页并切换图示
ManagerMenuContentPlaceHolder.Visible = true;
ManagerMainContentPlaceHolder.Visible = true;
ImageHead.ImageUrl = "assets/images/avatar-4.png";
ImageMenu.ImageUrl = "assets/images/avatar-4.png";
}
else {
ManagerMenuContentPlaceHolder.Visible = false;
ManagerMainContentPlaceHolder.Visible = false;
}
//载入使用者个人基本资料(渲染画面)
LabMenuAccount.Text = ticketUserDataArr[1];
LabMenuEmail.Text = ticketUserDataArr[3];
LabHeadUserName.Text = ticketUserDataArr[2];
}
}
}
using System;
using System.Web;
using System.Web.Security;
namespace TayanaYachtRe.Sys
{
/// <summary>
/// SignOut 的摘要描述
/// </summary>
public class SignOut : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//清除所有的 Session
if (context.Session != null) {
context.Session.Abandon();
context.Session.RemoveAll();
}
//建立一个同名的 Cookie 来覆盖原本的 Cookie
HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, "");
authenticationCookie.Expires = DateTime.Now.AddYears(-1);
context.Response.Cookies.Add(authenticationCookie);
// 执行登出
FormsAuthentication.SignOut();
// 转向到你登出後要到的页面
context.Response.Redirect("Manager_SignIn.aspx", true);
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
📢 泛型处理常式对於入门第一次遇到的人来说,看到这种看起来是中文,读起来不像是中文的东西,会突然有点不知所措,但爬文并看完官网的介绍後,就知道可以把它当成没有前台只有後置程序码的网页处理,你只要连到这个档案,就帮你直接执行後置程序码,看到以後就觉得超好用的啦,也有发现能用在下载功能,另外从官网的介绍可以发现还有几个副档名很陌生的类型,希望之後有机会能慢慢搞懂。
👀 附上微软官网介绍 : HTTP 处理常式和 HTTP 模组概观
<<: DAY5 - Side Project 主题:90天原子习惯挑战
图片来源 继续上一篇的目标设定, 有时候我觉得是因为你心中已有一个"既定的目标"...
做专案最怕就是一连串因应单位政策的改变而变更需求, 原本可以运作达成需求的系统,眼看就要结案, 却需...
暑假後期,指导教授给了第三届 Line Chatbot 设计大赛的资讯。 虽然比赛内容主要放在设计、...
近期将依些老程序转移至微服务上, 因为原本程序使用了大量 out 语法, 为了能够让微服务的 API...
环境准备 使用 Cloudflare DNS 安装 LiteSpeed Cache plugin ...