在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;
}
});

留言

這個網誌中的熱門文章

D-BUS學習筆記

關於藍牙裝置找尋(inquiry, scan)兩三事

Cisco Switch學習筆記: EtherChannel