Ok, I was reviewing my posts and found this bit of code I created in my drafts; not sure why I never posted it, but here it is as is. If you ever wanted to have a list of users that automatically removed user access after a period of time, this code will do it. I haven't parsed through the code again, but most of this looks good for SharePoint 2010 and should work for 2013. Let me know if anything has been deprecated and I will recreate and post an update. The code itself is an example of the actual logic that would be placed in a timer job, looks like I never finished the solution beyond this test, but the logic is there...
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
public partial class Pull : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Define variables and objects
SPWeb web = SPContext.Current.Web;
SPSite site = web.Site; string siteUrl = web.Url;
SPList splExpiryList = web.Lists["User Expiration"]; //A Table I created
DataTable dtExpiryList = splExpiryList.Items.GetDataTable();
SPGroup grp = web.Groups[1];int ID=0;
string username = "";
DataTable dtExpired = new DataTable();
//Fields Used in the Table I created
dtExpired.Columns.Add("ID");
dtExpired.Columns.Add("User");
dtExpired.Columns.Add("Group");
foreach (DataRow drExpiry in dtExpiryList.Rows)
{ //"Expiry_x0020_Date" is how sharepoint stores the field "Expiry Date" because there is a space
if (DateTime.Parse(drExpiry["Expiry_x0020_Date"].ToString()) == DateTime.Now)
//Compare the expiry date to current {
username = drExpiry["User"].ToString();
splExpiryList.Items.GetItemById(int.Parse(drExpiry["ID"].ToString()));
ID = int.Parse(drExpiry["ID"].ToString());
try //Let the User know what is being Deleted
{ grp = web.Groups[drExpiry["Group"].ToString()];
Response.Write("Identified and will affect " + drExpiry["Group"].ToString() + " As the Group containing " + drExpiry["User"].ToString() + " to be deleted. . .");
}
catch (Exception ex)
{ Response.Write(ex.Source + "
" + ex.Message + "
Stack Trace
" + ex.StackTrace + "
+ ex.HelpLink + "\">Help"); }
try //Create the Expired Users Table
{ DataRow drExpired = dtExpired.NewRow();
drExpired["ID"] = ID;
drExpired["User"] = username;
drExpired["Group"] = grp;
dtExpired.Rows.Add(drExpired);
dtExpired.AcceptChanges();
}
catch (Exception ex)
{ //This should never fail
Response.Write(ex.Source + "
" + ex.Message + "
Stack Trace
" + ex.StackTrace + "
+ ex.HelpLink + "\">Help
");
}
}
}foreach (DataRow row in dtExpired.Rows) //Delete Each Expired Item in the table
{ grp = web.Groups[row["Group"].ToString()];
foreach (SPUser user in grp.Users)
{if (user.Name == row["User"].ToString()) //Verify the User exists in the Group
{ web.AllowUnsafeUpdates = true; //Temporarily Allow unsafe updates
Response.Write("Deleting item " + row["ID"].ToString() + " from " + splExpiryList.Title + " . . .");
try
{ splExpiryList.Items.DeleteItemById(int.Parse(row["ID"].ToString())); //Delete the List Item
Response.Write("Success!");
}
catch (Exception ex)
{ Response.Write("Failed!
" + ex.Source + "
" + ex.Message + "
Stack Trace
" + ex.StackTrace + "
+ ex.HelpLink + "\">Help
"); }
Response.Write("Deleting user " + user.Name + " from " + grp.Name + " . . .");
try
{ grp.RemoveUser(user); // Remove the user from the Group
Response.Write("Success!");
}
catch (Exception ex)
{
Response.Write("Failed!" + ex.Source + " " + ex.Message + "Stack Trace" + ex.StackTrace + " " + ex.HelpLink + "\">Help");
}
splExpiryList.Update(); //Update the List
grp.Update(); //Update the Group
web.AllowUnsafeUpdates = false; //Turn off Unsafe Updates
}
else
{
Response.Write("Error! " + user.Name + " not found in group " + grp.Name + "");
}
}
} //Dispose objects dtExpired.Dispose();
dtExpiryList.Dispose();
web.Dispose();
site.Dispose();
}
}
Sorry if this interrupts my governance, but I think this might be useful to someone out there.
No comments:
Post a Comment