2014-04-04 74 views
0

我們的網站託管在共享服務器上。我們有一個獨立於任何成員角色的登錄模塊。我們還沒有使用這個功能。我們的登錄數據庫表只有電子郵件ID和密碼字段。 我們的其中一個文件夾(常規)包含敏感文檔:pdf; JPG; doc文件等。我們不希望這個文件夾被未經授權的用戶以及谷歌,雅虎等搜索引擎訪問。 我們添加了以下線路中的web配置保護沒有定義成員角色的Web文件夾

<location path="General" allowOverride="true"> 
<system.web> 
    <authorization> 
    <allow roles="Administrators" /> 
    <deny users="*" /> 
    </authorization> 
</system.web> 
    </location> 

這種變化在web配置已獲得該文件夾的訪問權限中的拒絕郵件的文件夾結果等。但是,現在我們希望我們的登錄用戶才能夠訪問此文件夾。我們嘗試爲登錄用戶添加以下行: Roles.CreateRole(「Administrators」); 但是,這會導致錯誤;看起來asp.net試圖創建成員表並且無法。 是否可以通過完全忽略Membership部分來強制給用戶分配角色?

我們沒有使用sqlaspent表格,也沒有使用它的計劃。 我們也沒有使用ASP.NET Membership框架。

原來的問題重新定義:(允許從網絡配置刪除的角色=「管理員」行)在Web配置結果被拒絕了通用文件夾中的所有文件

<location path="General" allowOverride="true"> 
    <system.web> 
     <authorization> 
       <deny users="*" /> 
     </authorization> 
    </system.web> 
     </location> 

上述變化的訪問。是否有可能(1)在運行時修改web配置並更改拒絕用戶允許用戶在general/test.aspx頁面加載部分或(2)從general/test.aspx頁面中的不同文件夾加載不同的Web配置加載?

+0

你能發佈錯誤消息,我會說,你需要拒絕匿名用戶,然後讓需要訪問該文件夾的角色。 – betelgeuce

+0

保存數據庫的位置沒有區別。成員資格提供者將管理用戶認證,角色提供者將處理角色。一旦加載,他們將使用當前的用戶憑證,然後檢查他們應該從成員資格提供者獲得的訪問權限。基本上,部分充當ACL。 – betelgeuce

+0

將錯誤消息添加到原始帖子中。另外,就像我提到的,我們沒有在應用程序的任何地方使用成員角色功能。 Thnx – Shankar

回答

0

這聽起來像是數據庫連接問題。您的遠程提供商允許遠程連接到您的數據庫?您可以使用SQL Server Management Studio連接到它嗎?

某些共享主機提供程序不允許遠程訪問SQL Server。

0

您是否已將數據庫安裝到sqlaspent表中?

如果不需要使用Aspnet SQl Server Registration Tool,請在數據庫中創建正確的結構表(已存儲哪些角色)。

創建的MembershipUser像一個管理員,Jojom,安吉麗娜·朱莉或你喜歡用它自己的屬性是什麼) 創建默認角色(客戶,管理員等)

綁定用戶的會員,然後你就可以使用授權規則。

你的方法只能說aspnet,只有通過Context.User.IsInRole(「管理員」)visibile的管理員可以訪問此頁面....但要成爲一個管理員,你需要存儲到數據庫或在自定義供應商......

+0

謝謝。請參閱原始文章的最後2行 - 爲了更加清晰而添加。 – Shankar

+0

嗨尚卡爾,我認爲這篇文章可以幫助你[不要依賴ASP.NET成員表](http://blogs.teamb.com/craigstuntz/2010/03/05/38558/) – makemoney2010

0

我不知道一種方式分配角色給用戶而不使用成員資格提供程序。我可以想到的一件事就是放棄web配置中的位置扇區,並使用Global.asax Application_BeginRequest方法開始監視對應用程序的每個請求,並檢查請求是否位於受限制的文件夾中,以及用戶是否進入會話)。

另一種方法是使用某種httpHandler來做保存事情。

編輯: 在你的登錄表單,一旦被他的用戶名和密碼驗證的用戶分配一個注意到這個用戶是管理員聯絡一個會話變量。

void Login() 
{ 
    //check user+password 
    //... 
    if(UserIsAuthenticated) 
    { 
     Session["Administrator"] = true; 
     //more stuff to do with authenticate user 
    } 
} 

,並在您的Global.asax:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if(Request.PhysicalPath.Contains("RestrictedFolderName")//you can do a more profound check here 
    { 
     if((bool)Session["Administrator"]) 
      //all ok - do nothing 
     else 
      //not authorized user trying to access folder- do redirect or somthing 
    } 
} 
+0

謝謝。我的思緒開始了。考慮到我們沒有使用Membership框架,我們如何檢查用戶登錄(會話)。 – Shankar

+0

謝謝Issac。我可以限制對該文件夾的訪問。但是,我仍然在掙扎(現在4個小時!)以獲得Session [「Administrator」]的價值。它一直拋出System.NullReferenceException。我也嘗試過Application_AcquireRequestState,到目前爲止沒有運氣。一旦我能夠檢查會議[「管理員」] - 我想這將得到解決。希望如果我拒絕訪問全球asax文件夾的搜索引擎谷歌,雅虎等被紀律或他們仍然會想辦法爬行到受限制的文件夾? – Shankar

+0

你在哪裏分配會話[「管理員」]?你需要在試圖解析它之前檢查它是否爲null。搜索引擎抓取工具的作用與匿名用戶相當,因此他們無法訪問需要分配給經過身份驗證的用戶的會話的文件夾。您始終可以使用Robots.txt文件限制對搜尋器的訪問 – Issac