在SharePoint中创建自定义文档库
我的SharePoint页面中有一个文档库,其中有10个文档 如果用户A登录,我希望他只看到该文档库中的5个文档 如何创建一些自定义文档库以使其正常工作 我安装了MOSS在SharePoint中创建自定义文档库,sharepoint,sharepoint-2007,moss,shared-libraries,Sharepoint,Sharepoint 2007,Moss,Shared Libraries,我的SharePoint页面中有一个文档库,其中有10个文档 如果用户A登录,我希望他只看到该文档库中的5个文档 如何创建一些自定义文档库以使其正常工作 我安装了MOSS 提前谢谢 您可以对文档库中的每个文档配置不同的权限。只需在每个项目上选择“管理权限”选项,并从文档库级别中断权限继承。请注意,拥有太多具有项目级权限的文档可能会给您带来维护噩梦。另一个选项是创建两个具有不同权限的文档库。编写一个ItemEventReceiver,根据库中的一个字段(即具有不同角色的列)中断权限 为此,我们创建
提前谢谢 您可以对文档库中的每个文档配置不同的权限。只需在每个项目上选择“管理权限”选项,并从文档库级别中断权限继承。请注意,拥有太多具有项目级权限的文档可能会给您带来维护噩梦。另一个选项是创建两个具有不同权限的文档库。编写一个ItemEventReceiver,根据库中的一个字段(即具有不同角色的列)中断权限 为此,我们创建了一个列表,其中包含与sharepoint组耦合的所有角色 i、 e 管理员->网站所有者(SPGroup)、公司管理员(SPGroup) 经理->经理(SPGroup) 然后在我们的内容类型中,我们有一个列表的查找列 下面是ItemEventReceiver的代码:
public override void ItemUpdated(SPItemEventProperties properties)
{
lock (_lock)
{
try
{
using (SPSite site = new SPSite(properties.SiteId,
properties.ListItem.ParentList.ParentWeb.Site.SystemAccount.UserToken))
using (SPWeb web = site.OpenWeb(properties.RelativeWebUrl))
{
web.AllowUnsafeUpdates = true;
var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
var roles = item["Roles"] as SPFieldLookupValueCollection;
var rolesList = web.Site.RootWeb.Lists["Company Roles"];
var groupsToAdd = new List<SPFieldUserValue>();
if (item.HasUniqueRoleAssignments)
{
item.ResetRoleInheritance();
item = item.ParentList.GetItemById(item.ID);
}
if (roles != null && roles.Count > 0)
{
// Iterate over the roles and see if there is a group associated
foreach (var role in roles)
{
var roleItem = rolesList.GetItemById(rol.LookupId);
if (roleItem != null)
{
// This is the SPgroup field in the rolesList
var groups = roleItem["Groups"] as SPFieldUserValueCollection;
if (groups != null)
{
groupsToAdd.AddRange(from g in groups
where g.User == null
select g);
}
}
}
if (groupsToAdd.Count > 0)
{
item.BreakRoleInheritance(false);
foreach (var value in groupsToAdd)
{
var group = web.Groups[value.LookupValue];
var assignment = web.RoleAssignments.GetAssignmentByPrincipal(group);
item.RoleAssignments.Add(assignment);
}
}
}
DisableEventFiring();
item.SystemUpdate(false);
EnableEventFiring();
}
}
catch (Exception ex)
{
//LOG ERROR
}
}
}
public override void ItemUpdated(SPItemEventProperties属性)
{
锁
{
尝试
{
使用(SPSite site=new SPSite(properties.SiteId,
properties.ListItem.ParentList.ParentWeb.Site.SystemAccount.UserToken)
使用(SPWeb=site.OpenWeb(properties.RelativeWebUrl))
{
web.AllowUnsafeUpdates=true;
var item=web.Lists[properties.ListId].GetItemById(properties.ListItemId);
变量角色=项目[“角色”]作为SPFieldLookupValueCollection;
var rolesList=web.Site.RootWeb.Lists[“公司角色”];
var groupsToAdd=新列表();
if(项目HasUniqueRoleAssignments)
{
item.ResetRoleInheritance();
item=item.ParentList.GetItemById(item.ID);
}
if(角色!=null&&roles.Count>0)
{
//迭代角色,查看是否存在关联的组
foreach(角色中的var角色)
{
var roleItem=rolesList.GetItemById(rol.LookupId);
if(roleItem!=null)
{
//这是角色列表中的SPgroup字段
var groups=roleItem[“groups”]作为SPFieldUserValueCollection;
如果(组!=null)
{
groupsToAdd.AddRange(组中的g)
其中g.User==null
选择g);
}
}
}
如果(groupsToAdd.Count>0)
{
项目.BreakRoleInheritance(假);
foreach(groupsToAdd中的var值)
{
var group=web.Groups[value.LookupValue];
var assignment=web.RoleAssignments.GetAssignmentByPrincipal(组);
项目。角色分配。添加(分配);
}
}
}
禁用事件触发();
项。系统更新(假);
enableEventFireing();
}
}
捕获(例外情况除外)
{
//日志错误
}
}
}
如果编码不适合您,并且您不希望对每个文件设置权限,那么还有第三个选项。我们使用设置了权限的文件夹
e、 g
创建一个名为“管理者”的文件夹,断开权限,并仅为管理者设置权限。
创建另一个名为“Employee 1”的文件夹,断开权限,并设置员工和员工经理的贡献权限
将文件放在适当的文件夹中,它将继承该文件夹的权限
这样,经理可以查看经理文件以及其员工的所有文件。用户只能看到自己的文件
总部、1区、2区等也可以采用类似的逻辑。。。以及为每个区域创建不同的组,然后将该组分配给文件夹的权限
请注意,使用此设计始终会考虑到维护所有权限和性能,但我们已经为750多个用户群体和数千个文档做了类似的事情,到目前为止,它对我们来说效果良好。谢谢Lars,但我将有办法访问我库中的许多文档,也可以访问许多用户!!