我的SharePoint页面中有一个文档库,其中有10个文档。如果UserA登录,我希望他只能看到那些文件库中的5个文件。我如何创建一些自定义文档库以使其工作?在SharePoint中创建自定义文档库
我也安装了MOSS。
在此先感谢!
我的SharePoint页面中有一个文档库,其中有10个文档。如果UserA登录,我希望他只能看到那些文件库中的5个文件。我如何创建一些自定义文档库以使其工作?在SharePoint中创建自定义文档库
我也安装了MOSS。
在此先感谢!
您可以在文档库中的每个文档上配置不同的权限。只需选择每个项目上的“管理权限”选项并从文档库级别中断权限继承。请注意,具有项目级权限的文档太多可能会为您创建维护噩梦。另一个选项可能是创建两个具有不同权限的文档库。
编写一个ItemEventReceiver,它基于库中的字段(即包含不同角色的列)来分配权限。
我们通过创建一个列表来保存所有与分享点组相关的角色。
即
管理员 - >网站的所有者(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
}
}
}
如果编码不为你工作,并在每一个文件,你不想设定权限,那么还有第三个选项。我们使用设置了权限的文件夹。
例如
创建一个名为“经理”的文件夹,中断权限,并将权限设置为只有管理员。 创建另一个名为“员工1”的文件夹,中断权限,并为员工和雇主的经理设置贡献权限。
将文件放在适当的文件夹中,它将继承该文件夹的权限。
通过这种方式,管理人员可以查看管理员文件以及员工的所有文件。用户只能看到他们自己的文件。
可以为总部,区域1,区域2等完成类似的逻辑......并为每个区域创建不同的组,然后将组分配给文件夹的权限。
请注意,在维护所有权限和性能时始终关注如何使用此设计,但我们一直在为750多个用户人群和数千个文档执行类似的操作,至今为止我们一直在为我们正常工作。
谢谢拉尔斯,但我将有许多文件在我的图书馆和方式许多用户! – Etienne 2009-06-29 17:10:09