我有一个包含字段的列表:标题,客户端,项目,描述。
分析人员可以看到以下字段:标题,项目,描述。
就分析师的观点而不是列表而言,一切都很好。但是,当他们需要修改单击编辑的记录时,他们也会看到并能够修改“客户”字段。
如何防止“客户”字段可供群组编辑?在WSS中有没有办法,或者我需要寻找第三方列表组件?
答案 0 :(得分:2)
所有字段都有一组属性,用于确定其在表单中的可见性,例如“ShowInNewForm”,“ShowInEditForm”和“ShowInDisplayForm”。还有一些用于文件对话框,列表设置页面和其他一些地方,但是已经过了它。简而言之,是的,您可以使用WSS在编辑表单中显示该字段,而无需任何第三方组件。
如果您需要任何人无法在编辑表单中看到的字段(也就是说,没有人能够在其表单中显示它),那么您需要将“ShowInEditForm”修改为true。这不能通过SharePoint UI直接修改,但使用对象模型非常简单。
如果您需要某些人通过SharePoint UI在某个时刻对其进行编辑,那么您将需要创建自定义编辑表单。这有点复杂,所以我会推迟提供该指令,除非你声明你需要走这条路(或者其他人通过这个答案并要求它)。尽管如此,WSS 3.0完全可以实现。
修改强>
如果您知道如何将内联C#代码插入到ASPX页面中,则可以使用SharePoint Designer非常简单地执行此操作。首先,请按照this article中的说明进行操作,尤其要确保不要删除默认列表表单Web部件。现在,在您添加的自定义列表表单中,使其包含任何人都可以编辑的每个字段。最后一步是使表单隐藏某些人的字段。我们将它们默认为Visible = false,如果允许用户,则翻转此开关。您可以通过检查当前用户是否属于指定组,或检查用户是否具有仅由这些组的人员持有的特定权限级别来执行此操作。您基本上会编写如下代码,我将使用检查指定的组作为示例。
using (SPWeb web = this.Web)
{
SPUser currUser = web.CurrentUser;
string[] listOfGroups = { "Group1Name", "Group2Name", "Group3Name" };
foreach (string groupName in listOfGroups)
{
if (currUser.Groups.Contains(groupName))
{
//Repeat this for each Control, refer to them by their ID. For example, this is for a control with the ID txtTitle.
txtTitle.Visible = true;
}
}
}
如果您不知道内联代码,则必须编写带有代码隐藏的自定义ASPX页面。将EditForm.aspx复制到一个新文件中 - 您应该根据文章设置自定义列表表单后执行此操作。您还可以从头开始构建新的ASPX页面,但请确保包含SharePoint页面的所有必需内容占位符。现在,该页面目前继承自Microsoft.SharePoint.WebPartPages.WebPartPage
。我们需要创建从该类继承的自定义代码,并更改页面以继承该新的自定义代码。在自定义代码中,覆盖其中一个OnLoad或OnInit方法,并在前面详细说明检查用户的权限。编译代码,将其部署到SharePoint服务器,它应该可以正常运行。
答案 1 :(得分:0)
如果您想隐藏字段或以新形式显示它们或编辑列表的表单页面...
转到列表设置。 在“高级设置”中,启用“允许管理内容类型”
通过这样做,您将在列表设置页面上获得列表名称链接。 打开链接并使用添加或删除选项选择要隐藏或隐藏的字段。
保存后,再次在高级设置...
中禁用“允许管理内容类型”多数民众赞成:)))