Sharepoint - 如何设置权限级别使用户能添加项目但不能查看?

12

我想允许一定组的用户向列表中添加项目,但不允许他们查看全部内容。这是为了设置一个具有私密部分的工作流程。我认为通过在以下位置定义新的权限级别来实现:

http://servername/_layouts/addrole.aspx(“添加权限级别”页面)

然而,当您选择“添加项目”列表权限时,“查看项目”也会自动被选中。

有人知道解决办法吗?


你可能想看一下这里被接受的答案:https://dev59.com/lkfRa4cB1Zd3GeqP6yuM,因为它提供了一个类似于[Sam Yates建议](#530931)的小绕路。 - jeffreypriebe
想要进行创新尝试,请访问此链接:http://expectedexception.wordpress.com/2011/03/03/remove-view-items-permission-from-sharepoint-list-with-anonymous-access-enabled/ - vikas mehta
怎么样使用“内容审核”设置。选择“只有能够审核项目的用户(以及项目的作者)”。不要忘记“草稿版本”。 - Andrey K
11个回答

10

作为一种折衷方案,您可以设置列表只显示给所有者看(设置 > 高级设置然后将读访问/编辑访问选项设置为“仅自己”。这不会阻止人们查看由他们添加的所有项目,但除了列表所有者外,没有任何可查看的内容。


4
View Items是Add Item的一个依赖权限,因此不确定我们是否可以在SharePoint中自己添加这样的权限。请看这里:(http://office.microsoft.com/en-us/sharepointtechnology/HA101001491033.aspx)
你可以通过创建两个列表并在第一个列表的项目添加事件中添加代码来将项目添加到另一个列表,然后从第一个列表中删除它,这是一个不太理想的解决方案...

请问您能否解释一下“将代码添加到第一个列表的项目添加事件中”是什么意思?这只有通过Sharepoint Designer 2007才能实现吗? - Stuart
不,这需要开发人员作为功能/解决方案的一部分创建代码。 - Nat
是的,Nat说得对,我们需要编写一些自定义代码,并将其与“项添加”事件挂钩才能实现这一点。 - Jomit
不要仅使用工作流,从Sharepoint设计师开始。使用复制项目和删除项目活动。 - Will Dieterich
我目前正在自己做这个。 实际上,你确实需要通过编码来完成。虽然使用SharePoint Designer的工作流可以运行,但是由设计师创建的工作流会以用户的权限运行(Sharepoint会报告工作流以“系统账户”运行,但事实并非如此)。因此,如果用户无法在第二个列表中添加项目,工作流将失败。 而通过编码创建的相同工作流将在系统账户下运行,并且能够正常工作。 - jeffreypriebe
我们使用SPD工作流中的“更新项目”来进行类似操作,以便在模拟步骤中将其复制到文件夹中,这样可以避免使用两个库,但是它也有自己的注意事项(任务表单中的损坏链接,项目处于“未安全”状态的短暂时期)。这让我感到困扰已经很长时间了:为什么要假设每个可以提交表单的人也可以查看它呢? - Daniel

3
$spweb=Get-SPWeb -Identity "<site url>";
$spRoleDefinition = New-Object Microsoft.SharePoint.SPRoleDefinition;
$spRoleDefinition.Name = "Submit only";
$spRoleDefinition.Description = "Can submit/add forms/files/items into library or list but cannot  view/edit them.";
$spRoleDefinition.BasePermissions = "AddListItems, ViewPages, ViewFormPages, Open";
$spweb.RoleDefinitions.Add($spRoleDefinition);

取自: http://sajiviswam.wordpress.com/2011/12/09/add-only-permission-level-in-sharepoint-2010/

1
考虑为链接添加上下文。有关详细信息,请参见如何回答 - Be Brave Be Like Ukraine

1
在工作流中使用模拟步骤。

1

我遇到了类似的问题,不希望匿名用户看到列表内容。

同样的解决方案可能适用于此情况。

在SharePoint设计器中(由于某种原因无法在Web上编辑页面),打开DispForm.aspx页面,在WebPart属性中添加目标受众(如果不希望任何人看到,则使WebPart隐藏)不要删除WebPart-这样做会完全破坏您的列表!

可以在AllItems.aspx上执行相同的操作

希望这可以帮助你。


0

@Jomit。你的解决方法可能有效,但它存在竞态条件问题。用户仍然有机会看到其他项目。这可能根据您的规则是不可行的。

在SharePoint中,常规列表在“设置/高级设置/项级权限”下提供此选项。尽管由于某种原因,此选项在GUI中缺失了文档表单库

一种可能的解决方案是编写一个简单的程序,使用SharePoint对象模型进行这些更改。 http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist.writesecurity.aspx

// Sample code for setting writing and reading security on a form library
class Program
            {
                static void Main(string[] args)
                {
                    using (SPSite site = new SPSite(args[0]))
                    {
                        using (SPWeb web = site.OpenWeb())
                        {
                            SPList list = web.Lists[args[1]];
                            list.WriteSecurity = 2;
                            list.ReadSecurity = 2;
                            list.Update();
                        }
                    }
                }
            }

这个结合事件接收器将完全解决问题。 - Gabriel Guimarães

0

我完全同意'Ceesaaxp'的观点。在列表的高级设置下,将读取访问权限设置为仅限他们自己。我创建了一个知识管理流程,其中我创建了两个列表,一个用于待处理的知识文章,另一个用于已批准的文章。我修改了待处理列表的“新建表单”页面,并使用JavaScript禁用了一个下拉框,该下拉框用作文章状态。然后将此下拉框永久设置为“待处理”。我还创建了一个新的权限级别,允许用户仅添加项目。然后我创建了一个工作流,当状态下拉框设置为“已批准”时,将文章移动到已批准列表中。

然后我更改了待处理列表的高级设置中的只读设置,以便在发布所有知识文章之前都经过批准。


0

使用SharePoint Designer,我只能想到使用工作流将任何项目从公共“投递箱”列表移动到安全列表。

用户可以查看和上传项目到公共投递箱,但立即启动一个工作流,将内容移动到另一个相同的安全列表。您可以决定是否需要允许内容覆盖。

这是一个hacky解决方法,但没有编程,SharePoint就是这样。(我的公司还不允许我对其编写代码)


0

您并没有具体说明您正在使用哪种列表,但是如果您在列表设置中查看“高级设置”,您可能会找到一个“项目级别权限”部分。这将允许您选择仅限制用户阅读(或编辑)他们提交的项。这超越了列表或其项上设置的其他ACL。


0

我认为使用高级权限并不可行,因为它无法阻止提交者查看它,否则这是一个好的解决方案! 我认为工作流可以胜任这项工作。只需确保上传项目时触发工作流程。然后,如果您可以构建一个工作流程,可以将特定权限设置为该项目,则所有事情都应该完成。 如果您不想亲自动手构建工作流程,请访问3w.sharepointboost.com,那里有一种名为“列视图权限”的即插即用解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接