2012-05-07 72 views
0

如果我想保護除一個用戶以外的所有人都能訪問的操作,我該怎麼做?確保只有特定用戶有權訪問

讓我們假設用戶有一個產品。當他們轉到EditProduct操作時,如何防止其他人訪問它?在過去,我總是使用User.Idenity.Name並將dthat與他們的用戶名進行比較。但是如果有人以username而不是UserName登錄,那麼即使它是同一用戶,情況也會中斷。

在每張支票上使用.ToUpper()或類似的東西似乎非常脆弱和低效。

回答

1

你可以把一個授權屬性,這樣的動作上面:

[Authorize(Users = "username")] 

我不能完全肯定是否是大小寫敏感的,但是這是爲了保護行動和控制器的最佳方法。此外,你可以做同樣的角色:

[Authorize(Roles = "Administrator")] 
+0

如果沒有角色還沒有被設置的所有用戶都認爲'Users'或者沒有默認?換句話說,您是否可以使用'[授權(用戶=「用戶名」)] 1而無需事先設置? – Johannes

+0

Johannes不清楚目標是使用授權保護方法,還是僅僅審計相關用戶是否具有權限(是創建者還是某種授予許可的方式)。默認授權操作篩選器只能保護針對禁止的操作(按名稱或角色)。如果目標是僅允許創建產品的用戶編輯產品,則這不起作用。如果需要,可以編寫自定義的授權過濾器,或者可以在從數據庫獲取數據後執行自己的檢查。 –

+0

@Johannes [Authorize]將審計您是否登錄了任何角色或任何用戶的含義。只有申請用戶或角色,如果您有權授予 –

1

字符串是否具有等於屬性:

User.Identity.Name.Equals("OtherName",StringComparison.CurrentCultureIgnoreCase) 
相關問題