这种行为很可能是由, 基本上
当自定义脚本功能 is 关掉
如何验证?
您可以使用以下控制台应用程序验证站点权限:
using (var ctx = GetContext(webUri, userName, password))
{
var rootWeb = ctx.Site.RootWeb;
ctx.Load(rootWeb, w => w.EffectiveBasePermissions);
ctx.ExecuteQuery();
var permissions = rootWeb.EffectiveBasePermissions;
foreach (var permission in Enum.GetValues(typeof(PermissionKind)).Cast<PermissionKind>())
{
var permissionName = Enum.GetName(typeof(PermissionKind), permission);
var hasPermission = permissions.Has(permission);
Console.WriteLine("Permission: {0}, HasPermission: {1}", permissionName, hasPermission);
}
}
where
public static ClientContext GetContext(Uri webUri, string userName, string password)
{
var securePassword = new SecureString();
foreach (var ch in password) securePassword.AppendChar(ch);
return new ClientContext(webUri) {Credentials = new SharePointOnlineCredentials(userName, securePassword)};
}
When SP.PermissionKind.AddAndCustomizePages https://msdn.microsoft.com/en-us/library/office/ee556747%28v=office.14%29.aspx被设定为False,添加用户自定义操作时出现访问被拒绝错误。
Solution
根据:
对于自助创建的网站,自定义脚本被禁用
默认
Solution: enable Allow users to run custom scripts on self-service created sites
从 SharePoint 管理中心启用或禁用脚本编写
- 使用你的工作或学校帐户登录 Office 365。
- 转到 SharePoint 管理中心。
- 选择设置。
-
在自定义脚本下选择:
- 选择确定。它需要约24小时为了做出改变
影响。
由于通过 SharePoint Online 管理中心对脚本设置进行的任何更改可能需要长达24 hours要生效,您可以在特定网站集上启用脚本立即地通过 CSOM API(SharePoint Online 客户端组件 SDK http://www.microsoft.com/en-us/download/details.aspx?id=42038)如下所示:
public static void DisableDenyAddAndCustomizePages(ClientContext ctx, string siteUrl)
{
var tenant = new Tenant(ctx);
var siteProperties = tenant.GetSitePropertiesByUrl(siteUrl, true);
ctx.Load(siteProperties);
ctx.ExecuteQuery();
siteProperties.DenyAddAndCustomizePages = DenyAddAndCustomizePagesStatus.Disabled;
var result = siteProperties.Update();
ctx.Load(result);
ctx.ExecuteQuery();
while (!result.IsComplete)
{
Thread.Sleep(result.PollingInterval);
ctx.Load(result);
ctx.ExecuteQuery();
}
}
Usage
using (var ctx = GetContext(webUri, userName, password))
{
using (var tenantAdminCtx = GetContext(tenantAdminUri, userName, password))
{
DisableDenyAddAndCustomizePages(tenantAdminCtx,webUri.ToString());
}
RegisterJQueryLibrary(ctx);
}
where
public static void RegisterJQueryLibrary(ClientContext context)
{
var actions = context.Site.UserCustomActions;
var action = actions.Add();
action.Location = "ScriptLink";
action.ScriptSrc = "~SiteCollection/Style Library/Scripts/jQuery/jquery.min.js";
action.Sequence = 1482;
action.Update();
context.ExecuteQuery();
}