Как программно управлять правами (site/list/item) в SharePoint?
- Добавление прав на документа для определенного пользователя (permissionLevel - уровень разрешений на сервере (Полный доступ, Ограниченный доступ, чтение и т.п.)):
public static void CreatePermissions(SPWeb theWeb, SPListItem ListItem, string loginName, string roleName, string permissionLevel)
{
try
{
theWeb = new SPSite(theWeb.Site.ID).OpenWeb(theWeb.ID);
theWeb.AllowUnsafeUpdates = true;
ListItem = theWeb.Lists[ListItem.ParentList.ID].GetItemById(ListItem.ID);
SPRoleAssignment roleAssignment = new SPRoleAssignment(loginName, "", roleName, "");
SPRoleDefinition RoleDefinition = theWeb.RoleDefinitions[permissionLevel];
if (!roleAssignment.RoleDefinitionBindings.Contains(RoleDefinition))
roleAssignment.RoleDefinitionBindings.Add(RoleDefinition);
//Check inheritance
if (!ListItem.HasUniqueRoleAssignments)
{
ListItem.BreakRoleInheritance(false);
}
ListItem.RoleAssignments.Add(roleAssignment);
ListItem.Update();
}
catch (Exception exc)
{
}
}
- Добавление прав на документа для определнной группы:
public static void CreatePermissions(SPWeb theWeb, SPListItem ListItem, string groupName, string permissionLevel)
{
try
{
theWeb = new SPSite(theWeb.Site.ID).OpenWeb(theWeb.ID);
theWeb.AllowUnsafeUpdates = true;
SPGroup group = theWeb.Groups[groupName];
SPRoleAssignment roleAssignment = new SPRoleAssignment(group);
SPRoleDefinition RoleDefinition = theWeb.RoleDefinitions[permissionLevel];
if (!roleAssignment.RoleDefinitionBindings.Contains(RoleDefinition))
roleAssignment.RoleDefinitionBindings.Add(RoleDefinition);
//Check inheritance
ListItem = theWeb.Lists[ListItem.ParentList.ID].GetItemById(ListItem.ID);
if (!ListItem.HasUniqueRoleAssignments)
ListItem.BreakRoleInheritance(false);
ListItem.RoleAssignments.Add(group);
ListItem.Update();
}
catch (Exception exc)
{
}
}
- Права на группу AD для объекта списка
public static void CreatePermissions(SPWeb theWeb, SPListItem ListItem, string groupName, string domainName, string permissionLevel)
{
try
{
theWeb = new SPSite(theWeb.Site.ID).OpenWeb(theWeb.ID);
theWeb.AllowUnsafeUpdates = true;
groupName = (domainName.Trim() == "" ? "" : domainName.Trim() + "\\") + groupName;
SPPrincipal oSPPrincipal;
oSPPrincipal = theWeb.EnsureUser(groupName);
SPRoleAssignment roleAssignment = new SPRoleAssignment(oSPPrincipal);
SPRoleDefinition RoleDefinition = theWeb.RoleDefinitions[permissionLevel];
if (!roleAssignment.RoleDefinitionBindings.Contains(RoleDefinition))
roleAssignment.RoleDefinitionBindings.Add(RoleDefinition);
//Check inheritance
ListItem = theWeb.Lists[ListItem.ParentList.ID].GetItemById(ListItem.ID);
if (!ListItem.HasUniqueRoleAssignments)
ListItem.BreakRoleInheritance(false);
ListItem.RoleAssignments.Add(oSPPrincipal);
ListItem.Update();
}
catch (Exception exc)
{
}
}
Как узнать запущен ли рабочий процес над документом?
bool WorkFlowStarted(SPListItem document, Guid WorkFlowId)
{
foreach (SPWorkflow workflow in document.Workflows)
{
if (workflow.ParentAssociation.BaseTemplate.Id == WorkFlowId&&
(workflow.InternalState & SPWorkflowState.Running) == SPWorkflowState.Running)
{
return true;
}
}
return false;
}
Используемые материалы:
- http://kwizcom.blogspot.com/2007/07/manage-sitelistitem-permissions-in.html
- http://msdn.microsoft.com/ru-ru/library/microsoft.sharepoint.spprincipal%28office.12%29.aspx
- http://msdn.microsoft.com/ru-ru/library/microsoft.sharepoint.sprole%28office.12%29.aspx
- http://msdn.microsoft.com/ru-ru/library/microsoft.sharepoint.sproleassignment%28office.12%29.aspx