2010-03-12 115 views
0

我有一個gridview與幾列,我想實現以下內容:
如果用戶沒有授權顯示正常的列。
如果用戶被授權:爲第一列文本設置mouseover事件,並在用戶將鼠標懸停在第一列(使用javascript)時在第二列顯示一些按鈕(對於非授權用戶不可用)。Gridview中的動態內容

我有2個困難:

第一個,當我要創建的按鈕和地方?
我有2個選項,
我可以在設計時創建這些按鈕,在gridviews模板中,只需將可見值設置爲false,然後在代碼隱藏中將其設置爲true,如果用戶被授權。
第二種選擇是在gridview_RowCreated事件(或任何其他事件)中動態創建此按鈕,如果用戶被授權的話。

第二個難點是設置javascript事件來顯示按鈕,只有在授權用戶時才應該添加事件!
請注意,事件和按鈕應該有一些與JavaScript函數相匹配的id,以知道在觸發事件時應該隱藏/取消隱藏的內容。

我該怎麼做,最佳實踐是什麼?
我知道這是一個長期的問題,但請儘量幫助:)

回答

0

如果問題是按鈕的有條件的授權,然後從服務器端沒有將他們輸出,如果用戶沒有被授權。也就是說,不要渲染按鈕並用JavaScript顯示/隱藏它們,因爲惡意用戶可能會在客戶端操縱JavaScript以顯示瀏覽器DOM中的隱藏按鈕,並且這是您無法控制的。如果您的服務器檢查不在位,這將增加他們獲得訪問權的機會。

使用後面提到的代碼隱藏功能,但有條件地將按鈕發送到客戶端。如果你發送他們,他們是可見的,如果你不,他們不是因爲他們不在場。然後,您不必爲此嘗試額外使用JavaScript。

這假設您已經使用了Webforms認證或類似的機制,以便您知道用戶是否經過了服務器端的授權,您可以在那裏檢查它並根據它在您的代碼中作出相應的決定。

也許我不明白你想要達到什麼樣的完整背景,但我試圖在傳達安全問題和推理。在開發中有很多地方可以使用JavaScript,但這次可能是錯誤的選擇。

但是 ......如果這些按鈕並不是一個真正的安全問題,並且一個無效的用戶訪問它們不會對事物的宏觀方案造成傷害,那麼就會忘記上述所有內容。

+0

如果我在服務器端設置Visible = false,它不能被javascript打開,對吧? – mariki 2010-03-13 08:49:59

+0

你是對的,因爲它設置爲False http://msdn.microsoft時不會呈現。COM/EN-US /庫/ system.web.ui.control.visible.aspx – 2010-03-13 14:44:37

0

您想要做的是使用ASP.Net Ajax Toolkit中的HoverMenu控件。這將處理所有的JavaScript爲你顯示和隱藏鼠標上的按鈕和鼠標移出。您可以在後面的代碼中啓用或禁用HoverMenu以處理您的授權。