/// <summary>
        /// Install permissions
        /// </summary>
        /// <param name="permissionProvider">Permission provider</param>
        /// <returns>A task that represents the asynchronous operation</returns>
        public virtual async Task UninstallPermissionsAsync(IPermissionProvider permissionProvider)
        {
            //default customer role mappings
            var defaultPermissions = permissionProvider.GetDefaultPermissions().ToList();

            //uninstall permissions
            foreach (var permission in permissionProvider.GetPermissions())
            {
                var permission1 = await GetPermissionRecordBySystemNameAsync(permission.SystemName);

                if (permission1 == null)
                {
                    continue;
                }

                //clear permission record customer role mapping
                foreach (var defaultPermission in defaultPermissions)
                {
                    var customerRole = await _customerService.GetCustomerRoleBySystemNameAsync(defaultPermission.systemRoleName);

                    await DeletePermissionRecordCustomerRoleMappingAsync(permission1.Id, customerRole.Id);
                }

                //delete permission
                await DeletePermissionRecordAsync(permission1);

                //save localization
                await _localizationService.DeleteLocalizedPermissionNameAsync(permission1);
            }
        }