2010-02-16 14 views
7

我見過的示例代碼看起來像這樣,這似乎是完全合理的:爲什麼我硬編碼我的控制器屬性中的用戶權限?

[Authorize(Roles = "Admin, User")] 
public class SomeController : Controller 

但我也看到了幾個例子看起來像這樣:

[Authorize(Users = "Charles, Linus")] 
public class SomeController : Controller 

爲什麼我會永遠想這樣做這個?我無法想象任何我想要建立一個知道其用戶名的系統的場景。

+7

如果你是Linus或Charles,你可能會這樣做。 – 2010-02-16 15:27:52

回答

3

這有幾個合法的用途,這裏有一個例子:如果你正在建立一個非常簡單的網站,它只是一個管理員帳戶和未經身份驗證的帳戶,你可以做

[Authorize(Users = "Admin")] 

這可以節省您的麻煩,只爲單個用戶構造角色的麻煩。認爲UNIX風格,其中根帳戶(uid 0)是特殊的而不是特定的組。

另一個例子是簡單的丟棄應用程序,在這裏你正在測試一些東西。如果你只是想測試你的認證頁面或類​​似的東西,沒有理由打擾角色。

還有一個原因:測試。您可以爲您的身份驗證構建單元測試,而無需單元測試基於角色的框架。 (請記住,不是每個人都使用默認的成員資格提供程序,並且某些成員資格提供程序非常複雜。)通過爲測試用戶創建硬編碼身份驗證,您可以繞過角色框架。

+0

同意,但你不能只是'Role =「Admin」'? – 2010-02-16 15:31:50

+0

@Robert Harvey:沒有,因爲任何管理員帳戶都可以訪問該功能。在他的例子中,只有管理員帳戶可以訪問它。 – 2010-02-16 15:36:53

+0

沒錯。這就是爲什麼我要把這個比喻說成根。例如,在大多數UNIX系統(使用PAM認證系統的系統除外)中,uid = 0的root帳戶對所有內容都具有特殊權限。其他管理員,即車輪組的成員,被允許在有限的時間內「sudo」(作爲超級用戶)或者「su」(成爲超級用戶)將其轉換成uid = 0帳戶(無論是對於命令還是直到他們退出他們的外殼)。但用戶本身是特殊的,而不是輪子(admin)組中的成員。 – 2010-02-16 15:48:25

1

你不會,硬編碼的用戶是一種難聞的氣味。這樣的事情存在角色。

編輯:我相信,就像.net 1.0用整個web.config命中允許/拒絕權限一樣,那些(或至少應該只是)用作示例醬,即使我進入了一堆的人相信博客,教程和樣本應該只使用良好的做法。

1

我唯一能想到的「合法」理由是建立一個後門 - 無論是爲了邪惡還是爲了「未來維護」的目的。後者是Bad Juju,因爲它引入了安全風險。前者是壞Juju當然:) :)

0

一對夫婦的你可能會考慮這樣做的原因:

  1. 的應用預計將有 很短的生命週期,並沒有 維護是必需的。
  2. 用戶(一個或多個) 在問題可能不屬於一個 充分定義的組(如在 一個小企業的情況下),和 沒有預期的變化。 (還是很糟糕的設計,但它 不會是聞所未聞的)
  3. 您可能有 幾個重載在需要的 組內個人的不同 行爲小 應用。

在任何情況下,它歸結爲糟糕的設計,你不想這樣做。但接口在那裏,因爲它是最簡單的控制級別。

0

我同意David Pfeffer。另外,我認爲你可以在你的應用程序中定義一組具有非常特定權限和作業的用戶 - 可能是測試目的,或許是性能跟蹤......當需求敲門時你會知道它; ) - 。

只是一個不應包含在您的應用程序所使用的有效用戶集合中的組。 :) - 硬核方式 -

相關問題