Skip to content

Instantly share code, notes, and snippets.

const Inheritance = '!*';
export const securityFieldName = '__Security';
const permissionCanRead = '+read';
const permissionCannotRead = '-read';
enum ParseState { au, ar, pe, pd };
export type Permissions = {
[username: string]: {
@moo2u2
moo2u2 / normal-mode.ts
Created October 8, 2023 02:30
Sitecore "normal mode" plugin with support for parsing Sitecore item security permissions
// Removes components from placeholders (in the page layout) if given role is not authorized to view them
function removeComponents(placeholders: PlaceholdersData, role: string) {
for (let placeholder in placeholders) {
for (let i = 0; i < placeholders[placeholder].length; i++) {
if ('fields' in placeholders[placeholder][i] || 'placeholders' in placeholders[placeholder][i]) {
const componentRendering = placeholders[placeholder][i] as ComponentRendering;
if (componentRendering?.fields) {
// @ts-expect-error
if('data' in componentRendering.fields && componentRendering.fields.data.datasource?.security) {
@moo2u2
moo2u2 / Feature.GraphQL.config
Last active October 7, 2023 03:12
Patching out the standard field filter and adding the security fields
<configuration>
<sitecore xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/">
<api>
<GraphQL>
<defaults>
<content>
<schemaProviders>
<edgeContent type="Sitecore.Services.GraphQL.EdgeSchema.EdgeSchemaProvider, Sitecore.Services.GraphQL.EdgeSchema">
<templates type="Sitecore.Services.GraphQL.Content.TemplateGeneration.Filters.StandardTemplatePredicate, Sitecore.Services.GraphQL.Content">
<paths>
@moo2u2
moo2u2 / custom-field-factory.tsx
Created May 4, 2023 02:25
Sitecore (headless) Forms custom field factory with hidden field using query string value provider. Sets the value of the hidden field as a given value from the query string.
import { useRouter } from 'next/router';
import {
FieldViewModel,
InputViewModel
} from '@sitecore-jss/sitecore-jss-forms';
import {
createDefaultFieldFactory,
ValueFieldProps
} from '@sitecore-jss/sitecore-jss-react-forms';
@moo2u2
moo2u2 / DataSourceSettingsManager
Created April 5, 2023 22:53
Fix for Sitecore Forms truncating long labels in list items (eg. checkbox list)
/// <summary>
/// Overriding this class to fix issue where labels (eg. on checkbox list) are truncated
/// </summary>
public class DataSourceSettingsManager : Sitecore.ExperienceForms.Mvc.DataSource.DataSourceSettingsManager
{
protected override void UpdateSettings(ListFieldItemCollection settings, Item fieldSettingsItem, FieldSettingsContext settingsContext)
{
//base.UpdateSettings(settings, fieldSettingsItem, settingsContext);
Assert.ArgumentNotNull(settings, "settings");
Assert.ArgumentNotNull(fieldSettingsItem, "fieldSettingsItem");
CustomFieldFactory.setComponent(AllFieldTypes.TextField, (props : FieldWithValueProps<FormField<TextViewModel>>) => {
// Replace markdown style links in text, eg. this is a sentence with [a link](https://google.com) in it
const markdownRegex = /\[([^\]]+)\]\(([^\)]+)\)/;
props.field.model.text = props.field.model.text?.replaceAll('\n','<br/>');
props.field.model.text = props.field.model.text?.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>");
if(props.field.model.text && props.field.model.text.match(markdownRegex)){
props.field.model.text = props.field.model.text.replace(markdownRegex, '<a href="$2">$1</a>');
const Tag = (props.field.model.htmlTag || 'p');
return React.createElement(Tag, { className: props.field.model.cssClass, dangerouslySetInnerHTML: {__html: props.field.model.text} });
}
import React from 'react';
import { InputViewModel } from "@sitecore-jss/sitecore-jss-forms";
import {
createDefaultFieldFactory,
FieldTypes,
ValueFieldProps
} from '@sitecore-jss/sitecore-jss-react-forms';
export const AllFieldTypes = {
...FieldTypes,
<configuration>
<sitecore xmlns:patch="http://www.sitecore.net/xmlconfig/">
<settings>
<setting name="Xdb.Enabled" value="false" />
<setting name="Xdb.Tracking.Enabled" value="false" />
</settings>
<services>
<configurator patch:delete="*[@type='Sitecore.XConnect.Client.Configuration.HealthCheckServicesConfigurators.XConnectCollectionHealthCheckServicesConfigurator, Sitecore.XConnect.Client.Configuration'" />
<configurator patch:delete="*[@type='Sitecore.XConnect.Client.Configuration.HealthCheckServicesConfigurators.XConnectConfigurationHealthCheckServicesConfigurator, Sitecore.XConnect.Client.Configuration'" />
<configurator patch:delete="*[@type='Sitecore.XConnect.Client.Configuration.HealthCheckServicesConfigurators.XConnectSearchealthCheckServicesConfigurator, Sitecore.XConnect.Client.Configuration'" />
@moo2u2
moo2u2 / CustomGetStartUrl.cs
Last active February 24, 2021 01:40
Version of Sitecore's CustomGetStartUrl processor for sites using CallbackAuthority setting
using Sitecore.Abstractions;
using Sitecore.Owin.Authentication.IdentityServer.Extensions;
using Sitecore.Owin.Authentication.Pipelines.CookieAuthentication.SignedIn;
using Sitecore.Pipelines.GetStartUrl;
using Sitecore.Sites;
using System;
namespace Identity.Pipelines.CookieAuthentication.SignedIn
{
public class CustomGetStartUrl : Sitecore.Owin.Authentication.Pipelines.CookieAuthentication.SignedIn.GetStartUrl
@moo2u2
moo2u2 / CustomGoToLoginPage.cs
Last active February 24, 2021 01:39
Version of Sitecore's GoToLoginPage processor for sites using CallbackAuthority setting
using Sitecore.Abstractions;
using Sitecore.Diagnostics;
using Sitecore.Owin.Authentication.IdentityServer.Extensions;
using Sitecore.Owin.Authentication.Pipelines.CookieAuthentication.ApplyRedirect;
using System;
using System.Collections.Specialized;
using System.Web;
namespace Identity.Pipelines.CookieAuthentication.ApplyRedirect
{