我有一个继承自Page的PageContext类。我有几个继承自PageContext的子类。在PageContext中,我获得了一个属性" Permission"。我需要设置" Permission"基于打开的子页面的属性。
这是我的PageContext
public class PageContext: Page
{
public string permission
{
get
{
switch ( the open child page)
{
case 'A':
return 'Read';
default:
return 'Read';
}
}
}
}
我可以在父类中实现这一点,还是必须在每个子页面中实现?
答案 0 :(得分:1)
我开发了与您的代码相同的内容,以检查每个页面的Page_Load中的用户访问权限,如下所示:
所以我有一个基本的MemberWebPage,如:
public abstract class MemberWebPage : System.Web.UI.Page
{
public virtual bool AutorizeUser()
{
return false;
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
}
所有继承的页面都应该实现基本方法(AutorizeUser),如:
public partial class UsersManagement :MemberWebPage
{
public override bool AutorizeUser()
{
EnteredUser up = (EnteredUser)Session["UserProfile"];
if (up == null)
Response.Redirect("../LogIn.aspx");
return up.HasAccess(PrimitiveActivity.UserManagement);
}
protected void Page_Load(object sender, EventArgs e)
{
if (!AutorizeUser())
Response.Redirect("../Login.aspx");
}
}
我的HasAccess方法将检查来自DB的用户访问权限!
但我仍然不太确定你的代码,无论如何你可以按照这些步骤(这可以是一个解决方案):
1-在PageContext中将'PageName'定义为虚拟字符串,它将返回null
2-每个派生类都将覆盖PageName
3-在PageContext中,'Permission'属性将根据PageName
返回所以我们有:
public class PageContext : Page
{
public virtual string PageName
{
get
{
return null;
}
}
public string Permission
{
get
{
switch (PageName)
{
case "Page1":
return "Read";
case "Page2":
return "Write";
default:
return "None";
}
}
}
}
派生类只是例如:
public class Page1 : PageContext
{
public override string PageName
{
get
{
return "Page1";
}
}
}
public class Page2 : PageContext
{
public override string PageName
{
get
{
return "Page2";
}
}
}
public class Page3 : PageContext
{
}
最后你可以使用这样的东西:
string p1Permission = (new Page1()).Permission;//Read
string p2Permission = (new Page2()).Permission;//Write
string p3Permission = (new Page3()).Permission;//None
希望会有所帮助。