diff --git a/bootstrap_styles.permissions.yml b/bootstrap_styles.permissions.yml
index 0d74b8166d..03674d7606 100644
--- a/bootstrap_styles.permissions.yml
+++ b/bootstrap_styles.permissions.yml
@@ -2,3 +2,5 @@ configure bootstrap styles:
   title: 'Configure Bootstrap Styles'
   description: 'Allows access to configuration for Bootstrap Styles.'
   restrict access: true
+permission_callbacks:
+  - Drupal\bootstrap_styles\Permissions\StylesPermissions::getPermissions
diff --git a/src/Permissions/StylesPermissions.php b/src/Permissions/StylesPermissions.php
new file mode 100644
index 0000000000..1dcf646f29
--- /dev/null
+++ b/src/Permissions/StylesPermissions.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace Drupal\bootstrap_styles\Permissions;
+
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\bootstrap_styles\StylesGroup\StylesGroupManager;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides an edit permission for each bootstrap_styles plugin type.
+ */
+class StylesPermissions implements ContainerInjectionInterface {
+  use StringTranslationTrait;
+
+  /**
+   * Prefix used when building permission names.
+   *
+   * @var string
+   */
+  const PREFIX = 'use bootstrap styles';
+
+  /**
+   * The styles group plugin manager.
+   *
+   * @var \Drupal\bootstrap_styles\StylesGroup\StylesGroupManager
+   */
+  protected $stylesGroupManager;
+
+  /**
+   * Constructs a new class instance.
+   *
+   * @param \Drupal\bootstrap_styles\StylesGroup\StylesGroupManager $styles_group_manager
+   *   The styles group plugin manager.
+   */
+  public function __construct(StylesGroupManager $styles_group_manager) {
+    $this->stylesGroupManager = $styles_group_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.bootstrap_styles_group')
+    );
+  }
+
+  /**
+   * Builds an array of permissions for each bootstrap style plugin.
+   *
+   * @return array
+   *   The array of permission values.
+   */
+  public function getPermissions() {
+    $permissions = [];
+
+    foreach ($this->stylesGroupManager->getStyles() as $style) {
+      $permissions += [
+        $this->getPermissionName($style['id']) => [
+          'title' => $this->t('Use %style styles', ['%style' => $style['title']]),
+        ],
+      ];
+    }
+
+    return $permissions;
+  }
+
+  /**
+   * Helper function to get a permission name (key) for a given style plugin.
+   *
+   * @param string $plugin_id
+   *   The style plugin id.
+   *
+   * @return string
+   *   The permission name.
+   */
+  public static function getPermissionName(string $plugin_id) {
+    return static::PREFIX . ' ' . $plugin_id;
+  }
+
+}
diff --git a/src/Plugin/BootstrapStyles/Style/BackgroundColor.php b/src/Plugin/BootstrapStyles/Style/BackgroundColor.php
index 5e6c1b0097..1866fc66de 100644
--- a/src/Plugin/BootstrapStyles/Style/BackgroundColor.php
+++ b/src/Plugin/BootstrapStyles/Style/BackgroundColor.php
@@ -51,8 +51,10 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
    */
   public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {
     $icon_path = drupal_get_path('module', 'bootstrap_styles') . '/images/';
-    $form['background_type']['#options']['color'] = $this->getSvgIconMarkup($icon_path . 'plugins/background/background-color.svg');
-    $form['background_type']['#default_value'] = $storage['background']['background_type'] ?? 'color';
+    if ($this->checkUserAccess()) {
+      $form['background_type']['#options']['color'] = $this->getSvgIconMarkup($icon_path . 'plugins/background/background-color.svg');
+      $form['background_type']['#default_value'] = $storage['background']['background_type'] ?? 'color';
+    }

     $form['background_color'] = [
       '#type' => 'radios',
@@ -68,6 +70,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
           ':input.bs_background--type' => ['value' => 'color'],
         ],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     // Attach the Layout Builder form style for this plugin.
diff --git a/src/Plugin/BootstrapStyles/Style/BackgroundMedia.php b/src/Plugin/BootstrapStyles/Style/BackgroundMedia.php
index 3b8e5621ca..1334aec1fa 100644
--- a/src/Plugin/BootstrapStyles/Style/BackgroundMedia.php
+++ b/src/Plugin/BootstrapStyles/Style/BackgroundMedia.php
@@ -225,10 +225,12 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
    */
   public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {
     $icon_path = drupal_get_path('module', 'bootstrap_styles') . '/images/';
-    $form['background_type']['#options']['image'] = $this->getSvgIconMarkup($icon_path . 'plugins/background/background-image.svg');
-    $form['background_type']['#options']['video'] = $this->getSvgIconMarkup($icon_path . 'plugins/background/background-video.svg');
-    if (!$form['background_type']['#default_value']) {
-      $form['background_type']['#default_value'] = $storage['background']['background_type'] ?? 'image';
+    if ($this->checkUserAccess()) {
+      $form['background_type']['#options']['image'] = $this->getSvgIconMarkup($icon_path . 'plugins/background/background-image.svg');
+      $form['background_type']['#options']['video'] = $this->getSvgIconMarkup($icon_path . 'plugins/background/background-video.svg');
+      if (!$form['background_type']['#default_value']) {
+        $form['background_type']['#default_value'] = $storage['background']['background_type'] ?? 'image';
+      }
     }

     // Background media.
@@ -246,6 +248,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
             ':input.bs_background--type' => ['value' => 'image'],
           ],
         ],
+        '#access' => $this->checkUserAccess(),
       ];
     }
     // Check if the bundle exist.
@@ -261,6 +264,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
             ':input.bs_background--type' => ['value' => 'video'],
           ],
         ],
+        '#access' => $this->checkUserAccess(),
       ];
     }

@@ -274,6 +278,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
           ':input.bs_background--type' => ['value' => 'image'],
         ],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     $form['background_options']['background_position'] = [
diff --git a/src/Plugin/BootstrapStyles/Style/Border.php b/src/Plugin/BootstrapStyles/Style/Border.php
index 8c65236b57..725619973b 100644
--- a/src/Plugin/BootstrapStyles/Style/Border.php
+++ b/src/Plugin/BootstrapStyles/Style/Border.php
@@ -249,6 +249,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
       '#attributes' => [
         'class' => ['bs_col--full', 'bs_input-boxes', 'bs_input-boxes--box-model', 'bs_border--type'],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     $form['border_style'] = [
diff --git a/src/Plugin/BootstrapStyles/Style/Margin.php b/src/Plugin/BootstrapStyles/Style/Margin.php
index 91c7aa83f4..1a574acabe 100644
--- a/src/Plugin/BootstrapStyles/Style/Margin.php
+++ b/src/Plugin/BootstrapStyles/Style/Margin.php
@@ -113,6 +113,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
       '#attributes' => [
         'class' => ['bs_col--full', 'bs_input-boxes', 'bs_input-boxes--box-model', 'bs_margin--type'],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     $default_value = 0;
@@ -135,6 +136,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
           ':input.bs_margin--type' => ['value' => 'margin'],
         ],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     // Loop through the directions.
@@ -159,6 +161,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
             ':input.bs_margin--type' => ['value' => 'margin_' . $directions[$i]],
           ],
         ],
+        '#access' => $this->checkUserAccess(),
       ];
     }

diff --git a/src/Plugin/BootstrapStyles/Style/Padding.php b/src/Plugin/BootstrapStyles/Style/Padding.php
index 96efc6a6d6..876d4350ea 100644
--- a/src/Plugin/BootstrapStyles/Style/Padding.php
+++ b/src/Plugin/BootstrapStyles/Style/Padding.php
@@ -113,6 +113,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
       '#attributes' => [
         'class' => ['bs_col--full', 'bs_input-boxes', 'bs_input-boxes--box-model', 'bs_padding--type'],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     $default_value = 0;
@@ -135,6 +136,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
           ':input.bs_padding--type' => ['value' => 'padding'],
         ],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     // Loop through the directions.
@@ -159,6 +161,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
             ':input.bs_padding--type' => ['value' => 'padding_' . $directions[$i]],
           ],
         ],
+        '#access' => $this->checkUserAccess(),
       ];
     }

diff --git a/src/Plugin/BootstrapStyles/Style/ScrollEffects.php b/src/Plugin/BootstrapStyles/Style/ScrollEffects.php
index 126d70e3dd..4ba273fe14 100644
--- a/src/Plugin/BootstrapStyles/Style/ScrollEffects.php
+++ b/src/Plugin/BootstrapStyles/Style/ScrollEffects.php
@@ -96,6 +96,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
         'class' => ['field-scroll-effects'],
       ],
       '#prefix' => '<span class="input-icon"></span>',
+      '#access' => $this->checkUserAccess(),
     ];

     // Add icons to the effets.
diff --git a/src/Plugin/BootstrapStyles/Style/TextAlignment.php b/src/Plugin/BootstrapStyles/Style/TextAlignment.php
index c7e066db74..2d1ad17b68 100644
--- a/src/Plugin/BootstrapStyles/Style/TextAlignment.php
+++ b/src/Plugin/BootstrapStyles/Style/TextAlignment.php
@@ -60,6 +60,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
       '#attributes' => [
         'class' => ['field-text-alignment', 'bs_input-boxes'],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     // Add icons to the container types.
diff --git a/src/Plugin/BootstrapStyles/Style/TextColor.php b/src/Plugin/BootstrapStyles/Style/TextColor.php
index 81de454a10..e6a7c4f21d 100644
--- a/src/Plugin/BootstrapStyles/Style/TextColor.php
+++ b/src/Plugin/BootstrapStyles/Style/TextColor.php
@@ -60,6 +60,7 @@ public function buildStyleFormElements(array &$form, FormStateInterface $form_st
       '#attributes' => [
         'class' => ['field-text-color', 'bs_input-circles', 'with-selected-gradient'],
       ],
+      '#access' => $this->checkUserAccess(),
     ];

     // Attach the Layout Builder form style for this plugin.
diff --git a/src/Style/StylePluginBase.php b/src/Style/StylePluginBase.php
index 6771404ac8..fb7676acb7 100644
--- a/src/Style/StylePluginBase.php
+++ b/src/Style/StylePluginBase.php
@@ -2,6 +2,7 @@

 namespace Drupal\bootstrap_styles\Style;

+use Drupal\bootstrap_styles\Permissions\StylesPermissions;
 use Drupal\Component\Plugin\PluginBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Form\FormStateInterface;
@@ -208,6 +209,16 @@ public function addClassesToBuild(array $build, array $classes, $theme_wrapper =
     return $build;
   }

+  /**
+   * Check if current user has permission to use the style.
+   *
+   * @return bool
+   *   Whether user has access or not.
+   */
+  public function checkUserAccess() {
+    return \Drupal::currentUser()->hasPermission(StylesPermissions::getPermissionName($this->getPluginId()));
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/src/StylesGroup/StylesGroupManager.php b/src/StylesGroup/StylesGroupManager.php
index df3ea694e3..8bc792b3a2 100644
--- a/src/StylesGroup/StylesGroupManager.php
+++ b/src/StylesGroup/StylesGroupManager.php
@@ -155,6 +155,8 @@ public function getAllowedPlugins(string $filter = NULL) {
   public function buildStylesFormElements(array &$form, FormStateInterface $form_state, array $storage, string $filter = NULL) {
     // Restrict styles.
     $allowed_plugins = $this->getAllowedPlugins($filter);
+    // Default to no access until we find at least one style the user can use.
+    $form['#access'] = FALSE;

     foreach ($this->getStylesGroups() as $group_key => $style_group) {
       // Check groups restriction.
@@ -171,6 +173,7 @@ public function buildStylesFormElements(array &$form, FormStateInterface $form_s
           '#title' => $group_instance->getTitleWithIcon(),
           '#open' => FALSE,
           '#tree' => TRUE,
+          '#access' => FALSE,
         ];
         $form[$group_key] += $group_instance->buildStyleFormElements($form[$group_key], $form_state, $storage);

@@ -181,6 +184,11 @@ public function buildStylesFormElements(array &$form, FormStateInterface $form_s
           }

           $style_instance = $this->styleManager->createInstance($style_key);
+          // Allow access to group and form if user can use any group style.
+          if ($style_instance->checkUserAccess()) {
+            $form[$group_key]['#access'] = TRUE;
+            $form['#access'] = TRUE;
+          }
           $form[$group_key] += $style_instance->buildStyleFormElements($form[$group_key], $form_state, $storage);
         }
       }
