В SharePoint 2007 поддерживаются разрешения на уровне элементов.
Вы можете создать обработчик событий списка (SPItemEventReceiver). Каждый раз, когда элемент пользователя изменяется / добавляется, обработчик может обновлять соответствующий элемент проекта.
public class EventHanlder: SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
// collection user and project information from the item being updated.
SPListItem item = properties.ListItem;
SPUser user = new SPFieldUserValue(item.Web, item["UserFieldName"] as string).User;
int projectId = new SPFieldLookupValue(item["ProjectFieldName"]).Id;
// create role assignment for the user on the user item.
SPRoleAssignment ra = new SPRoleAssignment(user);
SPRoleDefinition rd = item.Web.RoleDefinitions.GetByType(SPRoleType.Reader);
ra.RoleDefinitionBindings.Add(rd);
ra.Update();
// get the project item and update the role assignments.
SPList projectList = // retrieve project list here...
SPListItem projectItem = projectList.GetItemById(projectId);
projectItem.RoleAssignments.Add(ra);
}
}
Это просто пример кода. Я не уверен на 100%, работает ли вещь с SPField *** Value так.
Теперь я хочу дать каждому пользователю разрешение на просмотр проекта, которому он назначен, чтобы при открытии третьей формы в поле со списком, заполненным проектами, отображались только те проекты, на которые у него есть разрешения.
Это должно быть сделано автоматически с полем поиска, так как будут отображаться только элементы, на которые у пользователя есть разрешения.