在WSS Event中提昇權限
我有一個清單, 其中一個欄位希望其值能唯一(其實就是資料庫的鍵值), 但在WSS中找不到欄位可以設定成唯一值的方式, 只好在清單的新增事件中自己寫Event Receiver來檢查是否已有相同的值, 若有相同值則不允許存入! 結果因為使用者反應不希望其他人可以看到他輸入的資料, 所以我將該清單的版本控制中的需要核准內容打開, 並設成只有可以核准的人及作者本人可以看到項目: 沒錯! 如此一來只有作者本人及管理人可以看到項目; 但如此一來, A使用者輸入鍵值001, B使用者也看不到, 而且Event Receiver也會以B使用者的權限執行, 同樣查不到, 結果就讓B使用者也可以輸入鍵值001! 這樣的結果不是我們要的! 找了一下資料, 發現使用提昇權限的方式可以讓Event Receiver利用系統的權限執行, 所以可以查到所有人的資料, 如此雖然B使用者看不到001這個項目, 但在按下新增時, Event Receiver會查到已有001這個項次存在: // 查詢並取得清單中code欄位等於新值的項目 SPSecurity.RunWithElevatedPrivileges(delegate() { SPQuery query = new SPQuery(); query.Query = " " + code + " "; SPSite site = new SPSite(properties.WebUrl); SPWeb web = site.OpenWeb(); SPList list = web.Lists[properties.ListId]; // "Test" SPListItemCollection items = list.GetItems(query); if (items.Count > 0) { properties.ErrorMessage = "已存在相同code:" + code + "! Ya!2 "; properties.Cancel = true; } });