Preventing deleting item on Wss/Moss 2007
Tadi malam ngobrol ama client dan ada request untuk tidak bisa menghapus document yang di buat tetapi user tersebut punya hak akses untuk create document / upload document.
Daripada pikir panjang untuk menghapus link delete item di context menunya akhirnya saya langsung memberikan solusi bila user tersebut delete item tersebut akan di berikan notifikasi "You don't have authorized to delete this item".
Setelah client setuju akhirnya saya membuat event dan coding untuk handle event tersebut.
Coding sbb :
using System;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using System.Diagnostics;
using System.IO;
using System.Configuration;
namespace Agusto.Dms.SpEvent
{
[CLSCompliant(false)]
public class MyItemEvent : SPItemEventReceiver
{
private SPWeb spWeb = null;
/// <summary>
/// Initializes a new instance of the Microsoft.SharePoint.SPItemEventReceiver class.
/// </summary>
public MyItemEvent ()
{
}
/// <summary>
/// Synchronous before event that occurs before an existing item is completely deleted.
/// </summary>
/// <param name="properties">
/// A Microsoft.SharePoint.SPItemEventProperties object that represents properties of the event handler.
/// </param>
[SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
public override void ItemDeleting(SPItemEventProperties properties)
{
string LoginName = properties.UserLoginName;
if (!LoginName.ToLower().Equals(@"sharepoint\system"))
{
try
{
using (spWeb = new SPSite(properties.SiteId).OpenWeb())
{
SPUser user = spWeb.Users[LoginName];
if (!user.IsSiteAdmin)
{
properties.ErrorMessage = @"You don't have authorized to delete this item";
properties.Cancel = true;
}
}
}
catch (Exception ex)
{
properties.ErrorMessage = ex.Message + "," + ex.Source;
properties.Cancel = true;
}
}
}
}
}
}
Dengan code ini akhirnya user yang punya hak akses read/contributor tidak bisa delete item, tetapi system account dan account yang di set sebagi full control dari site akan bisa hapus item tersebut.