2012-04-03 109 views
2

我是新的.NET和MVC3,我目前正在將長期經典ASP站點轉換爲MVC3應用程序站點。MVC3 <authentication>和<authorization>裏面的<location>屬性

同一站點有四個區域,我需要唯一的登錄頁面和離散級別的訪問和安全性。這意味着我不想使用默認的代碼在我的web.config文件:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Logon" timeout="2880" /> 
</authentication> 

相反,我希望能夠建立我區應用程序內部,然後使用<location>屬性設置爲每個認證和授權規則。因此,例如:

<location path="AreaName"> 
<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="~/AreaName/Login" timeout="15" /> 
    </authentication> 
    <authorization> 
    <deny users="?"/> 
    </authorization> 
</system.web> 
</location> 

如果我刪除這些三條線:

<authentication mode="Forms"> 
    <forms loginUrl="~/AreaName/Login" timeout="15" /> 
    </authentication> 

然後,當我嘗試在路徑訪問任何的意見「AREANAME」我先被重定向到〜/帳戶/登錄。如果我把那些三線回來,我得到以下錯誤:

Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

我已搜查反對這個錯誤,沒有任何提出的建議似乎適用。我已經看到了一個應該將邏輯放在控制器上而不是在web配置中的答案,但這些方法仍然意味着您要爲整個站點使用默認的<authentication>

我不明白爲什麼我不能在<location>內有<authentication>屬性。任何對此的幫助將不勝感激。

如果我錯誤地回答了這個問題,我很抱歉。

+0

看起來這是因爲在ASP.NET框架的Machine.config文件中,爲認證部分設置了'allowDefinition =「MachineToApplication」'的設置。所以我想我的問題變成了,有沒有辦法在machine.config中重寫該設置,並將其設置爲在我的應用程序web.config文件中聲明'allowDefinition =「Everywhere」'? – Peter 2012-04-04 15:46:59

回答

0

可能您需要一個自定義成員資格提供程序和一個自定義角色提供程序(如果需要)...這裏是一個例子帖子Custom membership providers in ASP.NET ...如果您的擔心是訪問級別,您將需要使用自定義角色提供程序。 ..

+0

謝謝,但正如我在我的問題中指出的那樣,我並不是想通過一個登錄頁面將所有內容都彙集到一起 - 我希望最終能夠爲受保護的每個區域提供唯一的登錄頁面。最後一步仍然顯示將'[Authorize]'指令應用於控制器中的各個操作。 – Peter 2012-04-03 19:49:52

+0

好的......我的下一個問題就是爲什麼你需要有多個登錄頁面......當你可以擁有成員角色時......例如說如果你有一個管理區域......你不需要有一個登錄頁面單獨用於一個管理員......你仍然可以使用相同的登錄頁面......但這次你將添加管理員角色到用戶身份...並且你的授權屬性看起來像[授權(角色=角色名稱.Admin)]。 ..這種方式,你可以使用一個登錄頁面... – NiK 2012-04-03 19:56:39

+0

我不是從頭開始建立一個網站 - 四個區域各有自己的用戶數據庫,其中三個區域內有用戶和管理員可訪問的功能 - 管理員一個區域不是第二區域或第三區域的管理員。這些數據庫不能被合併或修改,我也沒有奢侈的報廢,並從一個全新的數據庫開始。爲什麼我不能在地點級別使用獨特的授權? – Peter 2012-04-03 20:10:19

相關問題