2009-09-18 55 views
0

在安全模型进行ASP.Net网站(.NET 3.5)我们存储的页面名称:可编程访问(全部)ASP.Net网页在一个网站?

page.GetType()名称

在数据库表的主键,以便能够查找用户是否可以访问某个页面。第一次访问页面时,该记录将自动在数据库中创建。

我们已经导出这些数据库语句来插入脚本,但是每次创建新页面时,我们都必须更新脚本,这不是一个大问题,但我希望找到一种自动的方式来执行此操作。

我创建了一个属性,我标记了几页,然后编写了一个小的过程来获取所有具有此属性的对象,通过反射创建实例并使用相同的代码插入记录以提供页面记录以上:

IEnumerable<Type> viewsecurityPages = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsDefined(typeof(ViewSecurityAttribute),false)); 

      foreach (Type t in viewsecurityPages) 
      { 
       object obj = Activator.CreateInstance(t, false); 

      //clip..(This code just checks if the record already exists in the DB) 

       if (feature == null) 
       { 

        Attribute attb = Attribute.GetCustomAttribute(t, typeof(ViewSecurityAttribute)); 

        if (attb != null) 
        { 
         CreateSecurableFeatureForPage((Page)obj, uow, attb.ToString()); 
        } 

       } 

      } 

的问题是,当页面经过实际的页面周期过程page.GetType()名称是这样的:

search_accounts_aspx

但是当我使用的行为它上面ivator方法返回:

账户

所以记录不匹配的安全表。无论如何,通过编程的方式“访问”一个网页,以便通过实际的页面生命周期,我会从Name参数中取回正确的值。

任何帮助/参考将不胜感激。

回答

0

有趣的问题......

当然还有一个(太明显了?)以编程方式访问该网页...使用System.Net.HttpWebRequest。当然,这需要URI而不仅仅是对象的句柄。这是“我们如何从这里到达那里?”问题。

我的建议是简单地创建另一个属性(或使用同一个),它存储您需要的标识符。那么无论你如何访问它,对吧?

另外...为什么不只是使用第三方网络蜘蛛/履带爬行您的网站,并打所有的网页?有几个免费选项。或者我错过了什么?

+0

我忘了提及我试过蜘蛛。该网站是一个真正的商业应用程序(出售运行内部网),所以很多“链接”实际上通过提交按钮等发生我可以在一个网站地图上工作,我猜... 我没有想到将属性更改为URI并使用HTTP请求访问这些URI。这可行,但在网站更改时仍需要一些手动操作,有趣的想法,我必须考虑。 – mlowrance 2009-09-23 12:46:50