diff --git a/grafana_backup/cli.py b/grafana_backup/cli.py
index 9c3b7e587a89ff55bdc14f7ef1fd91cf742ca66e..bc22e586f337b4534b2f0afb695d8cd85e18c909 100755
--- a/grafana_backup/cli.py
+++ b/grafana_backup/cli.py
@@ -10,7 +10,7 @@ docstring = """
 
 Usage:
     grafana-backup save [--config=<filename>] [--components=<folders,dashboards,datasources,alert-channels,organizations,users>] [--no-archive]
-    grafana-backup restore <archive_file> [--config=<filename>] [--components=<folders,dashboards,datasources,alert-channels,organizations,users>]
+    grafana-backup restore <archive_file> [--config=<filename>] [--components=<folders,folders_permissions,dashboards,datasources,alert-channels,organizations,users>]
     grafana-backup [--config=<filename>]
     grafana-backup -h | --help
     grafana-backup --version
@@ -19,7 +19,7 @@ Options:
     -h --help                                                       Show this help message and exit
     --version                                                       Get version information and exit
     --config=<filename>                                             Override default configuration path
-    --components=<folders,dashboards,datasources,alert-channels,organizations,users>    Comma separated list of individual components to backup
+    --components=<folders,folders_permissions,dashboards,datasources,alert-channels,organizations,users>    Comma separated list of individual components to backup
                                                                     rather than backing up all components by default
     --no-archive                                                    Skip archive creation and do not delete unarchived files
                                                                     (used for troubleshooting purposes)
diff --git a/grafana_backup/dashboardApi.py b/grafana_backup/dashboardApi.py
index 44478687a693330c966f2d1ed9616cfac1fcf1fb..2780844a568751cd7f0a5656de853780440d12c4 100755
--- a/grafana_backup/dashboardApi.py
+++ b/grafana_backup/dashboardApi.py
@@ -132,6 +132,12 @@ def get_folder_permissions(uid, grafana_url, http_get_headers, verify_ssl, clien
     return (status_code, content)
 
 
+def update_folder_permissions(payload, grafana_url, http_post_headers, verify_ssl, client_cert, debug):
+    items = json.dumps({'items': payload})
+    return send_grafana_post('{0}/api/folders/{1}/permissions'.format(grafana_url,payload[0]['uid']), items, http_post_headers, verify_ssl, client_cert,
+                             debug)
+
+
 def get_folder_id_from_old_folder_url(folder_url, grafana_url, http_post_headers, verify_ssl, client_cert, debug):
     if folder_url != "":
         # Get folder uid
diff --git a/grafana_backup/restore.py b/grafana_backup/restore.py
index 2d73f40c537238df993e6310c47f221261be72eb..a62a081512da7ad513a6538e93b151794c20926a 100755
--- a/grafana_backup/restore.py
+++ b/grafana_backup/restore.py
@@ -2,6 +2,7 @@ from grafana_backup.commons import print_horizontal_line
 from grafana_backup.create_org import main as create_org
 from grafana_backup.api_checks import main as api_checks
 from grafana_backup.create_folder import main as create_folder
+from grafana_backup.update_folder_permissions import main as update_folder_permissions
 from grafana_backup.create_datasource import main as create_datasource
 from grafana_backup.create_dashboard import main as create_dashboard
 from grafana_backup.create_alert_channel import main as create_alert_channel
@@ -117,3 +118,30 @@ def restore_components(args, settings, restore_functions, tmpdir):
                         file_path = os.path.join(root, filename)
                         print('restoring {0}: {1}'.format(ext, file_path))
                         restore_functions[ext](args, settings, file_path)
+
+
+def restore_from_dir(args, arg_components, settings, restore_dir):
+
+    restore_functions = { 'folder': create_folder,
+                            'folder_permissions': update_folder_permissions,
+                            'datasource': create_datasource,
+                            'dashboard': create_dashboard,
+                            'alert_channel': create_alert_channel,
+                            'organization': create_org,
+                            'user': create_user}
+
+    if arg_components:
+        arg_components_list = arg_components.split(',')
+
+        # Restore only the components that provided via an argument
+        # but must also exist in extracted archive
+        for ext in arg_components_list:
+            for file_path in glob('{0}/**/*.{1}'.format(restore_dir, ext[:-1]), recursive=True):
+                print('restoring {0}: {1}'.format(ext, file_path))
+                restore_functions[ext[:-1]](args, settings, file_path)
+    else:
+        # Restore every component included in extracted archive
+        for ext in restore_functions.keys():
+            for file_path in glob('{0}/**/*.{1}'.format(restore_dir, ext), recursive=True):
+                print('restoring {0}: {1}'.format(ext, file_path))
+                restore_functions[ext](args, settings, file_path)
diff --git a/grafana_backup/update_folder_permissions.py b/grafana_backup/update_folder_permissions.py
new file mode 100644
index 0000000000000000000000000000000000000000..025a0d6c01ff6811a80849093b155aee879706f1
--- /dev/null
+++ b/grafana_backup/update_folder_permissions.py
@@ -0,0 +1,18 @@
+import json
+from grafana_backup.dashboardApi import update_folder_permissions
+
+
+def main(args, settings, file_path):
+    grafana_url = settings.get('GRAFANA_URL')
+    http_post_headers = settings.get('HTTP_POST_HEADERS')
+    verify_ssl = settings.get('VERIFY_SSL')
+    client_cert = settings.get('CLIENT_CERT')
+    debug = settings.get('DEBUG')
+
+    with open(file_path, 'r') as f:
+        data = f.read()
+
+    folder_permissions = json.loads(data)
+    if folder_permissions:
+        result = update_folder_permissions(folder_permissions, grafana_url, http_post_headers, verify_ssl, client_cert, debug)
+        print("update folder permissions {0}, status: {1}, msg: {2}".format(folder_permissions[0].get('title', ''), result[0], result[1]))