全部 -
我正在使用WSS 3.0。目前,人力资源部门会将员工的内部公司简历上传到我们网站上的文档库,但出于隐私原因,我们必须限制对该文档库的访问,这会强制用户在每次想要更新简历时都要通过人力资源。
我的想法是创建一个启用了附件的列表,允许用户只查看/编辑他们自己的项目,然后授予HR管理所有条目的权限。这适用于HR需要创建初始列表项并附加简历的例外,这意味着列表项将“由{hr}”创建,并且由附加了简历的最终用户不可见/可编辑。
关于我如何允许HR在上传时修改“创建者”字段的任何想法,以便最终用户可以看到并编辑他们的简历,或者以不同的方式解决这个问题?
谢谢!
答案 0 :(得分:7)
创建一个文档库来保存简历。然后给HR部门(SharePoint用户组)“读取/写入所有”库的权限,让其他人读/写你自己的“权利。创建一个名为”Resume“的内容类型,基于以下内容: box文档内容类型。然后将包含简历所关注的Employee(SPUser字段)的字段添加到内容类型(以及所需的任何其他字段,即名称,地址等)。在创建listitem时,HR正确填写此内容(填写所需的字段)。
然后,编写一个绑定到刚创建的内容类型的itemeventreceiver并覆盖ItemUpdated事件。
代码如下:
public override void ItemUpdated(SPItemEventProperties properties)
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
using (SPWeb web = properties.OpenWeb())
{
web.AllowUnsafeUpdates = true;
var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
if (item != null)
{
if (item.Fields.ContainsField("Employee"))
{
item["Author"] = item["Employee"];
// Author is the internal name of the Created by field,
// always use Internal Names!
DisableEventFiring();
item.SystemUpdate();
EnableEventFiring();
}
}
}
});
}
您可以使用FeatureReceiver将ItemEventReceiver绑定到内容类型,如下所示:
SPContentType docCt = web.ContentTypes[new SPContentTypeId("CONTENTYPE ID GOES HERE")];
docCt.EventReceivers.Add(SPEventReceiverType.ItemUpdated, "ASSEMBLYNAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=TOKEN", "FULLY QUALIFIED CLASSNAME");
docCt.Update();
答案 1 :(得分:3)
为什么不直接使用文档库进行简历? (而不是带有附件的列表。)您可以为其内部的所有文档提供HR完整读/写,并且简历的所有者将仅对自己的简历提供权限。
答案 2 :(得分:2)
我找到了一种使用SharePoint Designer更改“创建者”字段以创建工作流的方法。
答案 3 :(得分:0)
使用自定义上传屏幕,您可以在上传之前更改当前用户的上下文。它需要使用以下内容查找用户令牌(这些是工作代码的片段,其中包含错误处理和其他内容已删除)。请注意,EnsureUser将要求当前用户基本上是管理员/所有者。
using (SPSite site = GetImpersonatedSite(runAsUser))
{
using (SPWeb web = site.OpenWeb())
{
// Do stuff here
}
}
private SPSite GetImpersonatedSite(string username)
{
user = SPContext.Current.Web.EnsureUser(username);
SPSite site = new SPSite(SPContext.Current.Web.Url, user.UserToken);
return site;
}
答案 4 :(得分:-1)
我有类似的情况(迁移到sharepoint),我必须将一个带有admin用户的文件添加到文档库,然后“更改”用户。我这样做了,可能会对你有所帮助:
using (var root = site.RootWeb)
{
var users = root.SiteUsers;
var user = users["domain\username"];
file.Item[SPBuiltInFieldId.Created_x0020_By] = user.ID;
file.Item[SPBuiltInFieldId.Modified_x0020_By] = user.ID;
file.Item.UpdateOverwriteVersion();