2010-04-17 13 views
5

我正在ASP.NET MVC中編寫一個會有用戶帳戶的站點。由於該網站將面向討論,因此我認爲我需要一個管理員系統,以便能夠像Stack Overflow一樣控制用戶,就像我們在這裏一樣。我想能夠使用戶進入「暫停」,以便他們能夠登錄到該網站(在這一點他們迎接一條消息,如「你的帳戶有已暫停至[DATE]「),但無法完成他們通常能夠執行的功能在ASP.NET MVC中爲用戶實現一個暫停或懲罰系統

實現此目的的最佳方式是什麼?

我正在考慮創建一個「Suspended」角色,但事情是,我對普通用戶本身有不同的角色,擁有不同的權限。

你有沒有曾經設計過這樣的功能?我應該怎麼做?提前致謝。

+2

+1很好的問題,有kitteh化身 – 2010-04-17 06:55:05

+0

不明原因downvote :( – 2010-04-18 06:09:30

+0

+1死亡downvoters>; - | – 2010-04-20 18:06:25

回答

2

讓我將評論轉換爲答案和強姦扎克和詹姆斯答案提供我認爲將是一個可行的解決方案,而無需輸入'自定義提供商區域'。雖然編寫自定義提供程序並不複雜,但根據我的經驗,如果您可以讓內置提供程序執行您所需的操作,即使它在這裏或那裏需要一種氣味,始終是最佳路線。

添加一個角色,比如說WellGroomedAndBehavesSelf,用於控制對良好打扮和行爲良好的用戶應該有權訪問的內容的訪問。

在web.config中實施配置文件並添加ReinstateDate屬性(或UngroundedOnDate; -D)。

當用戶行爲異常時,將他們從角色WellGroomedAndBehavesSelf中刪除並設置ReinstateDate配置文件屬性。

在您的登錄邏輯中,覆蓋OnAuthenticate並檢查ReinstateDate配置文件屬性(如果存在並傳遞),清除它並將該用戶添加到角色WellGroomedAndBehavesSelf

完成並且不需要定製提供程序。

更新:被永久接地,如果莫名其妙的輪廓變得比登錄邏輯別處清除, 的替代方法,而且可能更健壯阻止用戶是檢查的作用WellGroomedAndBehavesSelf,若沒有,然後檢查輪廓ReinstateDate。如果它已經通過或不存在,請將用戶放回WellGroomedAndBehavesSelf

效果相同,但邏輯中的細微變化將提供更強大的解決方案。

如何實現簡介:

如果您正在使用一個Web站點項目here

如果您使用的是Web 應用程序項目外觀here

+0

我想我實際上會使用這種解決方案。說,「在你的web.config中實現一個配置文件和一個dd一個ReinstateDate屬性(或UngroundedOnDate; -D)「?我不確定如何將屬性添加到web.config中的配置文件。謝謝! – 2010-04-20 13:43:55

+0

@maxim - 更新了答案。 – 2010-04-20 18:04:27

+0

謝謝!我對ASP.NET MVC很陌生:我在哪裏創建角色?另外,如何將配置文件配置到SQL Server表中? – 2010-04-21 19:54:06

2

我不知道你的對象模型是什麼樣子,但我會假設任何用戶可能被掛起。

編輯:我想過一種替代解決方案,考慮到您需要將數據序列化到某處,可能會更簡單。也許你可以在你的用戶對象上使用普通的DateTime,但是對於新用戶來說,它可以初始化爲DateTime.MinValue。無論何時您將用戶暫停,請將suspendedUntil設置爲暫停狀態直到。

DateTime suspendedUntil = DateTime.MinValue; 

每當你需要檢查,看看用戶是否被暫停或沒有,只是比較suspendedUntilDateTime.Now。如果suspendedUntilDateTime.Now之後,您知道用戶被暫停,直到指定的日期和時間。否則,用戶不會被暫停。用戶退出暫停狀態後,不需要修改suspendedUntil,因爲它會在DateTime.Now之後。

bool userIsSuspended = suspendedUntil > DateTime.Now; 

序列化DateTime將節約suspendedUntil.ToBinary()值和「補水」的事情它使用DateTime.FromBinary(long)

+0

這是一個非常有趣的解決方案:我要去。 – 2010-04-17 08:17:16

3

我認爲角色是不用編寫大量管道代碼就可以走的路。

創建一個角色,名爲活動默認情況下,每個人都是其成員。然後讓用戶在被暫停時脫離該角色。

要拒絕給暫停用戶的每個操作都需要活動角色。 Simples。

+0

堅持:用戶一次可以屬於多個角色,對嗎?這樣,如果我有多個用戶角色,所有用戶仍然處於活動狀態,並且在被暫停時, d缺乏主動但仍然有他們的一般角色 – 2010-04-17 07:49:06

+0

多數民衆贊成在這個想法是, – 2010-04-17 08:16:14

+0

我會嘗試,看起來像一個非常簡單的計劃 – 2010-04-17 08:16:42