Как добавить сайт на экспресс панель
3 способа добавить страницу на экспресс-панель в Opera для компьютера
Экспресс-панель в браузере Opera для компьютера можно с уверенностью назвать “центром управления” самыми важными и часто посещаемыми страницами. Они сразу оказываются перед глазами на расстоянии всего одного клика как только вы открываете новую вкладку. Если вы хотите обеспечить максимально быстрый доступ к любимой странице, вы можете выбрать один из трех способов добавления ее на экспресс-панель.
Через значок сердца на странице
После клика по значку сердца наведите курсор на миниатюру страницы – вы увидите иконку экспресс-панели. Но обратите внимание – в этом случае страница также будет добавлена и в закладки.
Клик правой кнопкой мыши по странице
Альтернативный способ – кликните правой кнопкой мыши непосредственно по странице. В появившемся меню вы увидите опцию “Добавить на экспресс-панель”.
Кнопка “+” на самой экспресс-панели
Opera предложит вам страницы, которые вы недавно посещали, или же вы cможете ввести URL нужной страницы в соответствующем поле. Кроме того, вы увидите несколько расширений, которые могут оказаться полезными.
Если вы хотите сгруппировать определенные страницы на экспресс-панели, просто перетяните один из ярлыков на другой для создания папки.
Сколько сайтов вы добавили на свою экспресс-панель в Opera?
c # - Добавление веб-сайта в IIS Express для всех пользователей
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
Как добавить панель администратора на основе ролей в приложение Node.js за 10 минут
Панель администратора в Node.js с ролевым контролем доступа
В этом кратком руководстве я расскажу, как добавить ролевую панель администратора в ваше приложение Node.js . Вы можете использовать эти знания для создания целого приложения с ролями доступа для управления различными типами данных за 10 минут.
ok - версия MVP этого приложения :)
Мы будем использовать admin-bro, который представляет собой автоматически сгенерированный интерфейс администратора с открытым исходным кодом для узла.js-приложения.
Стек
Вот что мы будем использовать:
- в качестве роутера, будем использовать Express framework
- для постоянного хранения, мы будем использовать MongoDB с mongoose ODM
- и ранее упомянутый admin-bro
Итак, приступим!
Установить приложение
Прежде всего, давайте создадим папку и запустим в ней новое приложение Node.js:
mkdir my-admin-app cd my-admin-app пряжа init -y
Установите зависимости:
yarn add express mongoose admin-bro admin-bro-mongoose admin-bro-expressjs
И, наконец, скопируйте пример приложения со страницы документации admin-bro без примеров вызовов API.
Я также изменил модель пользователя, добавив поля пароль
и роль
. Роль может быть admin или limited .
Это все 38 строк кода:
// Требования const mongoose = require ('мангуст') const express = require ('экспресс') const bodyParser = require ('body-parser') const AdminBro = требуется ('админ-брат') const AdminBroExpressjs = требуется ('admin-bro-expressjs') // Мы должны сообщить AdminBro, что с его помощью мы будем управлять ресурсами мангуста AdminBro.registerAdapter (требуется ('админ-бро-мангуст')) // экспресс-определение сервера const приложение = экспресс () app.use (bodyParser.json ()) // Определения ресурсов const User = mongoose.model ('Пользователь', { электронная почта: {type: String, required: true}, пароль: {type: String, required: true}, роль: {type: String, enum: ['admin', 'limited'], required: true}, }) // Передаем все настройки конфигурации в AdminBro const adminBro = новый AdminBro ({ ресурсы: [Пользователь], rootPath: '/ админ', }) // Создайте и используйте маршрутизатор, который будет обрабатывать все маршруты AdminBro const router = AdminBroExpressjs.buildRouter (adminBro) app.use (adminBro.options.rootPath, маршрутизатор) // Запуск сервера const run = async () => { ожидание mongoose.connect ('mongodb: // localhost: 27017 / test', {useNewUrlParser: true}) await app.listen (8080, () =>
console.log (`Пример приложения, прослушивающего порт 8080!`)) } бегать()
Теперь (при условии, что у вас работает MongoDB) запустите сервер, чтобы убедиться, что все работает правильно:
node index.js
Вы должны увидеть:
AdminBro: bundle ready Пример приложения, прослушивающего порт 8080!
, так что откройте: http: // localhost: 8080 / admin и поиграйте с ним.
Хешировать пароль
Видим, что пароль не хеширован. Так что давайте это изменим!
Мы будем использовать библиотеку bcrypt для хеширования паролей:
yarn add bcrypt
Теперь нам нужно перехватить действие new
и изменить пароль на зашифрованный.
Итак, давайте сначала подготовим нашу модель, переименовав поле пароля в базе данных в encryptedPassword
:
// Определения ресурсов const Пользователь = мангуст.model ('Пользователь', { электронная почта: {type: String, required: true}, encryptedPassword: {type: String, required: true}, роль: {type: String, enum: ['admin', 'limited'], required: true}, })
Затем добавьте некоторые параметры в модель пользователя AdminBro. Мы создадим новое виртуальное свойство с именем пароль
(потому что у нас больше нет пароля в базе данных). И мы покажем это только на странице edit
.
Во-вторых, мы создаем ловушку перед действием, которая будет хешировать пароль.
Вот как все это будет выглядеть:
// Передать все настройки конфигурации в AdminBro const adminBro = новый AdminBro ({ Ресурсы: [{ ресурс: Пользователь, параметры: { properties: { encryptedPassword: { isVisible: ложь, }, пароль: { тип: 'строка', isVisible: { list: false, edit: true, filter: false, show: false, }, }, }, действия: { новый: { до: async (запрос) => { если (запрос.payload.record.password) { request.payload.record = { ... request.payload.record, encryptedPassword: ждать bcrypt.hash (request.payload.record.password, 10), пароль: undefined, } } запрос на возврат }, } } } }], rootPath: '/ админ', })
Как вы, наверное, заметили, мы также полностью скрыли encryptedPassword
из пользовательского интерфейса.
Хорошо, теперь пора завести реальных пользователей! Итак, откройте панель администратора и создайте двух пользователей: одного с ролью admin , а другого с ролью с ограниченным доступом .
Запомните их пароли, потому что в следующем абзаце мы добавим страницу входа.
Добавление страницы входа
admin-bro-expressjs
плагин, который мы используем для присоединения администратора к экспресс-структуре, имеет возможность аутентифицировать пользователей AdminBro. Чтобы использовать его, мы должны изменить функцию buildRouter
на buildAuthenticatedRouter
. Теперь мы можем передать метод аутентификации, который проверит электронную почту и пароль.
// Создайте и используйте маршрутизатор, который будет обрабатывать все маршруты AdminBro const router = AdminBroExpressjs.buildAuthenticatedRouter (adminBro, { аутентифицировать: async (электронная почта, пароль) => { const user = await User.findOne ({электронная почта}) if (пользователь) { const matched = await bcrypt.compare (пароль, user.encryptedPassword) if (matched) { возвратный пользователь } } вернуть ложь }, cookiePassword: 'какой-то секрет-пароль-используется-для-защищенного-cookie', })
Наконец, установите аутентифицированные зависимости маршрутизатора:
yarn add cookie-parser express-session
, и мы можем снова запустить сервер и войти в приложение.
Ограничение доступа ко всему ресурсу
Имея все это, теперь мы можем реализовать реальный контроль доступа на основе ролей.
Чтобы продемонстрировать это, давайте создадим другую коллекцию - Машины с полями имени, владельца и цвета.
// Коллекция автомобилей const Cars = mongoose.model ('Автомобиль', { имя: Строка, color: {type: String, enum: ['black'], required: true}, // Генри Форд ownerId: { тип: mongoose.Types.ObjectId, ref: "Пользователь", } })
Теперь давайте отключим изменение коллекции пользователей, чтобы администраторы с ограниченным доступом могли видеть только записи.
Для этого мы должны добавить параметр действия isAccessible
в параметры пользователя для: изменить
, новый
и удалить действия
:
isAccessible: ({currentAdmin}) => currentAdmin && currentAdmin. роль === 'админ',
, где currentAdmin - это объект, который мы вернули в функции buildAuthenticatedRouter аутентификации
.
Теперь только админы смогут добавлять новых пользователей.
Ограничение доступа к выбранным записям
isAccessible
принимает в качестве аргумента весь ActionContext. Это дает нам множество вариантов. Например, мы можем отключить редактирование автомобилей, которые не принадлежат ограниченным пользователям ( админы по-прежнему смогут редактировать все).
Для этого мы можем передать следующую функцию как edit,
, так и delete
действиям в параметрах сбора автомобилей:
isAccessible: ({currentAdmin, record}) => {return currentAdmin && (currentAdmin.роль === 'admin' || currentAdmin._id === record.param ('ownerId'))}
Вроде нормально, но что с new
action. Мы должны ограничить администраторов с ограничениями, чтобы они добавляли только свои автомобили. Мы можем сделать это, заполнив поле ownerId
автоматически в зависимости от текущего пользователя, вошедшего в систему.
Во-первых, мы должны отключить это поле в пользовательском интерфейсе:
свойства: { ownerId: { isVisible: { изменить: ложь, показать: правда, список: правда, filter: true } } }
и добавьте обработчик before к new action:
before: async (request, {currentAdmin}) => { запрос.payload.record = { ... request.payload.record, ownerId: currentAdmin._id, } запрос на возврат } `
И все. Мы только что создали панель администратора с контролем доступа на основе ролей.
А это весь код приложения:
// Требования const mongoose = require ('мангуст') const express = require ('экспресс') const bodyParser = require ('body-parser') const AdminBro = требуется ('админ-брат') const AdminBroExpressjs = требуется ('admin-bro-expressjs') const bcrypt = требуется ('bcrypt') // Мы должны сообщить AdminBro, что с его помощью мы будем управлять ресурсами мангуста AdminBro.registerAdapter (требуется ('админ-бро-мангуст')) // экспресс-определение сервера const приложение = экспресс () app.use (bodyParser.json ()) // Определения ресурсов const User = mongoose.model ('Пользователь', { электронная почта: {type: String, required: true}, encryptedPassword: {type: String, required: true}, роль: {type: String, enum: ['admin', 'limited'], required: true}, }) // Коллекция автомобилей const Cars = mongoose.model ('Автомобиль', { имя: Строка, color: {type: String, enum: ['black'], required: true}, // Генри Форд ownerId: { тип: мангуст.Типы.ObjectId, ref: "Пользователь", } }) // Функции RBAC const canEditCars = ({currentAdmin, record}) => { вернуть currentAdmin && ( currentAdmin.role === 'админ' || currentAdmin._id === record.param ('ownerId') ) } const canModifyUsers = ({currentAdmin}) => currentAdmin && currentAdmin.role === 'admin' // Передаем все настройки конфигурации в AdminBro const adminBro = новый AdminBro ({ Ресурсы: [{ ресурс: Автомобили, параметры: { properties: { ownerId: {isVisible: {edit: false, show: true, list: true, filter: true}} }, действия: { изменить: {isAccessible: canEditCars}, удалить: {isAccessible: canEditCars}, новый: { до: async (запрос, {currentAdmin}) => { запрос.payload.record = { ... request.payload.record, ownerId: currentAdmin._id, } запрос на возврат }, } } } }, { ресурс: Пользователь, параметры: { properties: { encryptedPassword: {isVisible: false}, пароль: { тип: 'строка', isVisible: { list: false, edit: true, filter: false, show: false, }, }, }, действия: { новый: { до: async (запрос) => { если (запрос.payload.record.password) { request.payload.record = { ... request.payload.record, encryptedPassword: ждать bcrypt.hash (request.payload.record.password, 10), пароль: undefined, } } запрос на возврат }, }, изменить: {isAccessible: canModifyUsers}, удалить: {isAccessible: canModifyUsers}, новое: {isAccessible: canModifyUsers}, } } }], rootPath: '/ админ', }) // Создайте и используйте маршрутизатор, который будет обрабатывать все маршруты AdminBro const router = AdminBroExpressjs.buildAuthenticatedRouter (adminBro, { аутентифицировать: async (электронная почта, пароль) => { const user = await User.findOne ({электронная почта}) if (пользователь) { const matched = await bcrypt.compare (пароль, user.encryptedPassword) if (matched) { возвратный пользователь } } вернуть ложь }, cookiePassword: 'какой-то секрет-пароль-используется-для-защищенного-cookie', }) app.use (adminBro.options.rootPath, маршрутизатор) // Запуск сервера const run = async () => { ожидание mongoose.connect ('mongodb: // localhost: 27017 / test', {useNewUrlParser: true}) ждать приложение.listen (8080, () => console.log (`Пример приложения, прослушивающего порт 8080!`)) } бегать()
Последние слова
Надеюсь, вам понравилась эта статья. Если вы хотите узнать больше об AdminBro, загляните на страницу документации и попробуйте.
Между прочим, если у вас есть какие-либо вопросы относительно AdminBro или любой другой технической проблемы, с которой вы боретесь - не стесняйтесь написать мне! [email protected]
.Express Tutorial: веб-сайт местной библиотеки - изучение веб-разработки
Первая статья в нашей серии практических руководств объясняет, что вы узнаете, и предоставляет обзор примера веб-сайта «локальной библиотеки», над которым мы будем работать и развивать в последующих статьях.
Обзор
Добро пожаловать в учебник MDN "Local Library" Express (Node), в котором мы разрабатываем веб-сайт, который можно использовать для управления каталогом локальной библиотеки.
В этой серии обучающих статей вы:
- Используйте инструмент Express Application Generator для создания скелета веб-сайта и приложения.
- Запуск и остановка веб-сервера узла.
- Используйте базу данных для хранения данных вашего приложения.
- Создайте маршруты для запроса различной информации и шаблоны («представления») для отображения данных в виде HTML для отображения в браузере.
- Работа с формами.
- Разверните ваше приложение в производственной среде.
Вы уже узнали о некоторых из этих тем и кратко коснулись других. К концу серии руководств вы должны будете знать достаточно, чтобы самостоятельно разрабатывать простые приложения Express.
Сайт местной библиотеки
LocalLibrary - это название веб-сайта, который мы создадим и будем развивать в ходе этой серии руководств. Как и следовало ожидать, цель веб-сайта - предоставить онлайн-каталог для небольшой местной библиотеки, где пользователи могут просматривать доступные книги и управлять своими учетными записями.
Этот пример был тщательно выбран, поскольку его можно масштабировать, чтобы показать столько деталей, сколько нам нужно, и его можно использовать для демонстрации практически любой функции Express.Что еще более важно, это позволяет нам предоставлять управляемый путь через функции, которые вам понадобятся на любом веб-сайте:
- В первых нескольких статьях учебника мы определим простую библиотеку , доступную только для просмотра, , которую члены библиотеки могут использовать, чтобы узнать, какие книги доступны. Это позволяет нам исследовать операции, которые являются общими для почти каждого веб-сайта: чтение и отображение контента из базы данных.
- По мере нашего продвижения пример библиотеки естественным образом расширяется, чтобы продемонстрировать более продвинутые функции веб-сайта.Например, мы можем расширить библиотеку, чтобы можно было создавать новые книги, и использовать это, чтобы продемонстрировать, как использовать формы и поддерживать аутентификацию пользователей.
Несмотря на то, что это очень расширяемый пример, он называется Local Library не зря - мы надеемся показать минимум информации, который поможет вам быстро начать работу с Express. В результате мы будем хранить информацию о книгах, копиях книг, авторах и другую ключевую информацию. Однако мы не будем хранить информацию о других элементах, которые может предоставить библиотека, или предоставлять инфраструктуру, необходимую для поддержки нескольких библиотечных сайтов или других функций «большой библиотеки».
Я застрял, где взять исходники?
По мере того, как вы будете работать с руководством, мы предоставим вам соответствующие фрагменты кода для копирования и вставки в каждой точке, а также будет другой код, который, мы надеемся, вы расширите сами (с некоторыми рекомендациями).
Вместо того, чтобы копировать и вставлять все фрагменты кода, попробуйте набрать их. В конечном итоге это принесет вам пользу, поскольку вы будете более знакомы с кодом в следующий раз, когда придете писать что-то подобное.
Если вы застряли, вы можете найти полностью разработанную версию сайта на Github здесь.
Примечание: Конкретные версии node, Express и других модулей, с которыми была протестирована эта документация, перечислены в файле проекта package.json.
Сводка
Теперь, когда вы знаете немного больше о веб-сайте LocalLibrary и о том, что вы собираетесь узнать, пора приступить к созданию скелетного проекта, содержащего наш пример.
В этом модуле
.Веб-фреймворкExpress (Node.js / JavaScript) - Изучите веб-разработку
Express - популярный неопытный веб-фреймворк, написанный на JavaScript и размещенный в среде выполнения Node.js. В этом модуле объясняются некоторые ключевые преимущества фреймворка, как настроить среду разработки и как выполнять общие задачи веб-разработки и развертывания.
Предварительные требования
Перед тем, как приступить к работе с этим модулем, вам необходимо понять, что такое серверное веб-программирование и веб-фреймворки, в идеале, прочитав темы в нашем модуле «Первые шаги серверного веб-программирования».Общие знания концепций программирования и JavaScript настоятельно рекомендуются, но не являются необходимыми для понимания основных концепций.
Примечание : На этом веб-сайте есть много полезных ресурсов для изучения JavaScript в контексте разработки на стороне клиента. : JavaScript, Руководство по JavaScript, Основы JavaScript, JavaScript (обучение). Базовый язык JavaScript и концепции одинаковы для серверной разработки на Node.js, и этот материал будет актуален. Node.js предлагает дополнительные API-интерфейсы для поддержки функций, которые полезны в средах без браузера (например,g., для создания HTTP-серверов и доступа к файловой системе), но не поддерживает API-интерфейсы JavaScript для работы с браузером и DOM.
Это руководство предоставит некоторую информацию о работе с Node.js и Express, а также есть множество других отличных ресурсов в Интернете и в книгах - на некоторые из них есть ссылки в статьях Как начать работу с Node.js (StackOverflow) и Что такое лучшие ресурсы для изучения Node.js? (Quora).
Направляющие
- Экспресс / Введение в узел
- В этой первой статье Express мы отвечаем на вопросы «Что такое Node?» и "Что такое экспресс?" и расскажем, что делает веб-платформу Express особенной.Мы опишем основные функции и покажем вам некоторые из основных строительных блоков приложения Express (хотя на данный момент у вас еще нет среды разработки, в которой можно было бы его протестировать).
- Настройка среды разработки Node (Express)
- Теперь, когда вы знаете, для чего предназначен Express, мы покажем вам, как настроить и протестировать среду разработки Node / Express в Windows, Linux (Ubuntu) и Mac OS X. Какую бы распространенную операционную систему вы ни использовали, эта статья должен дать вам все необходимое, чтобы начать разработку Express-приложений.
- Express Tutorial: сайт местной библиотеки
- В первой статье нашей серии практических руководств объясняется, что вы узнаете, и дается обзор примера веб-сайта «локальной библиотеки», над которым мы будем работать и развивать в последующих статьях. Учебное пособие по
- Express, часть 2: Создание скелета веб-сайта
- В этой статье показано, как создать "каркасный" проект веб-сайта, который затем можно будет заполнить маршрутами, шаблонами / представлениями и базами данных для конкретного сайта. Учебное пособие по
- Express, часть 3: Использование базы данных (с Mongoose)
- В этой статье кратко представлены базы данных для Node / Express. Затем будет показано, как мы можем использовать Mongoose для обеспечения доступа к базе данных для веб-сайта LocalLibrary . В нем объясняется, как объявляются схема и модели объекта, основные типы полей и базовая проверка. Он также кратко показывает несколько основных способов доступа к данным модели. Учебное пособие по
- Express, часть 4: Маршруты и контроллеры
- В этом руководстве мы настроим маршруты (код обработки URL) с «фиктивными» функциями обработчика для всех конечных точек ресурсов, которые нам в конечном итоге понадобятся на веб-сайте LocalLibrary .По завершении у нас будет модульная структура для нашего кода обработки маршрута, которую мы можем расширить с помощью реальных функций-обработчиков в следующих статьях. У нас также будет хорошее понимание того, как создавать модульные маршруты с помощью Express. Учебное пособие по
- Express, часть 5: Отображение данных библиотеки
- Теперь мы готовы добавить страницы, которые отображают книги веб-сайта LocalLibrary, и другие данные. Страницы будут включать домашнюю страницу, которая показывает, сколько записей у нас есть для каждого типа модели, а также страницы со списком и подробностями для всех наших моделей.Попутно мы получим практический опыт получения записей из базы данных и использования шаблонов. Учебное пособие по
- Express, часть 6: Работа с формами
- В этом руководстве мы покажем вам, как работать с HTML-формами в Express, используя Pug, и, в частности, как писать формы для создания, обновления и удаления документов из базы данных. Учебное пособие по
- Express, часть 7: развертывание в производственной среде
- Теперь, когда вы создали замечательный веб-сайт LocalLibrary , вы захотите установить его на общедоступном веб-сервере, чтобы к нему могли получить доступ сотрудники библиотеки и члены через Интернет.В этой статье представлен обзор того, как вы можете найти хост для развертывания вашего веб-сайта и что вам нужно сделать, чтобы подготовить ваш сайт к работе.
См. Также
- Установка LocalLibrary на PWS / Cloud Foundry
- В этой статье представлена практическая демонстрация того, как установить LocalLibrary в облаке PaaS Pivotal Web Services - это полнофункциональная альтернатива с открытым исходным кодом Heroku, облачной службе PaaS, используемой в части 7 руководства, указанной выше.PWS / Cloud Foundry определенно стоит проверить, если вы ищете альтернативу Heroku (или другому облачному сервису PaaS) или просто хотите попробовать что-то другое.
Добавление дополнительных руководств
Все существующие учебные пособия перечислены выше, но если вы хотите расширить этот модуль, можно рассмотреть некоторые другие интересные темы, в том числе:
- Использование сессий.
- Аутентификация пользователя.
- Авторизация и разрешения пользователей.
- Тестирование веб-приложения Express.
- Веб-безопасность для веб-приложений Express.
Оценка модуля также стала бы прекрасным дополнением!
.