Система контроля и управления доступом в некатегорированные помещения
Разработка системы контроля и управления доступом в некатегорированные помещения, реализуемой в виде аппаратно-программного комплекса с клиент-серверной архитектурой. Разработка и описание алгоритмов функционирования системы, ее программной части.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 22.02.2019 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath)
const nodePaths = (process.env.NODE_PATH || '')
.split(process.platform === 'win32' ? ';' : ':')
.filter(Boolean)
.map(resolveApp)
const paths = {
appBuild: resolveApp('build'),
appHtml: resolveApp('src/index.html'),
appIndex: resolveApp('src/index.jsx'),
appPackageJson: resolveApp('package.json'),
appSrc: resolveApp('src'),
appConfig: resolveApp('src/config'),
appNodeModules: resolveApp('node_modules'),
publicAssets: resolveApp('public'),
scssPath: resolveApp('scss'),
nodePaths,
}
const CleanPlugin = require('clean-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const PreloadWebpackPlugin = require('preload-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const CompressionPlugin = require('compression-webpack-plugin')
const BabiliPlugin = require('babili-webpack-plugin')
module.exports = (params) => {
const env = params.env
const isLocal = params.local
const isProduction = env === 'production'
const ifLocal = (plugin, fallback) => isLocal ? plugin : fallback
const ifProduction = (plugin, fallback) => isProduction ? plugin : fallback
return {
devtool: isProduction ? 'cheap-module-source-map' : 'eval',
context: paths.appSrc,
entry: {
main: paths.appIndex,
vendor: _.compact([
ifLocal('webpack-dev-server/client?/'),
'babel-polyfill',
'react',
'react-dom',
'react-router',
'react-bootstrap',
'react-addons-css-transition-group',
'lodash',
'classnames',
]),
},
output: {
path: paths.appBuild,
filename: `assets/js/[name]${isLocal ? '' : '.[chunkhash:8]'}.js`,
chunkFilename: `assets/js/[name]${isLocal ? '' : '.[chunkhash:8]'}.chunk.js`,
publicPath: '/',
},
resolve: {
extensions: [ '.js', '.jsx' ],
modules: [
paths.appSrc,
'node_modules',
],
},
module: {
rules: [
/* {
enforce: 'pre',
test: /\.jsx?$/,
include: paths.appSrc,
use: 'eslint-loader',
}, */
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
},
],
},
{
test: /\.s?css$/,
loader: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
'css-loader?modules&importLoaders=0&localIdentName=[local]',
'postcss-loader',
'sass-loader',
],
}),
},
{
test: /\.(gif|png|jpg|jpeg\ttf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
use: 'file-loader',
},
],
},
plugins: _.compact([
new webpack.LoaderOptionsPlugin({
debug: !isProduction,
minimize: isProduction,
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: Infinity,
filename: 'assets/js/vendor.[chunkhash:8].js',
}),
new CleanPlugin(paths.appBuild),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(env),
},
CONFIG: JSON.stringify(require(`${paths.appConfig}/config.${env}.json`)),
}),
new BabiliPlugin(),
new HtmlWebpackPlugin({
template: paths.appHtml,
production: isProduction,
inject: true,
}),
new PreloadWebpackPlugin({
rel: 'prefetch',
fileBlacklist: [ /\.map$/ ],
}),
new ExtractTextPlugin({
filename: `assets/css/[name]${isLocal ? '' : '.[chunkhash:8]'}.css`,
allChunks: true,
}),
new CopyWebpackPlugin([
{
from: paths.publicAssets,
to: 'assets',
},
]),
new CompressionPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: /\.js$|\.css$/,
threshold: 0,
minRatio: 0.8,
}),
ifProduction(null, new webpack.NamedModulesPlugin()),
ifProduction(new webpack.optimize.AggressiveMergingPlugin()),
ifProduction(new webpack.optimize.UglifyJsPlugin({
comments: false, // remove comments
compress: {
unused: true,
dead_code: true, // big one--strip code that will never execute
warnings: false, // good for prod apps so users can't peek behind curtain
drop_debugger: true,
conditionals: true,
evaluate: true,
drop_console: true, // strips console statements
sequences: true,
booleans: true,
pure_getters: true,
unsafe: true,
unsafe_comps: true,
screw_ie8: true,
},
output: {
comments: false,
},
exclude: [ /\.min\.js$/gi ],
sourceMap: true,
})),
]),
devServer: {
contentBase: paths.appSrc,
// hot: true,
},
}
}
ФАЙЛ FRONT/INDEX.JSX
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
ReactDOM.render(
<App/>,
document.getElementById('app'),
)
ФАЙЛ FRONT/INDEX.HTML
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Панель администрирования</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
crossorigin="anonymous" />
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"/>
<link rel="apple-touch-icon" sizes="57x57" href="/assets/icons/apple-icon-57x57.png" />
<link rel="apple-touch-icon" sizes="60x60" href="/assets/icons/apple-icon-60x60.png" />
<link rel="apple-touch-icon" sizes="72x72" href="/assets/icons/apple-icon-72x72.png" />
<link rel="apple-touch-icon" sizes="76x76" href="/assets/icons/apple-icon-76x76.png" />
<link rel="apple-touch-icon" sizes="114x114" href="/assets/icons/apple-icon-114x114.png" />
<link rel="apple-touch-icon" sizes="120x120" href="/assets/icons/apple-icon-120x120.png" />
<link rel="apple-touch-icon" sizes="144x144" href="/assets/icons/apple-icon-144x144.png" />
<link rel="apple-touch-icon" sizes="152x152" href="/assets/icons/apple-icon-152x152.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/assets/icons/apple-icon-180x180.png" />
<link rel="icon" type="image/png" sizes="192x192" href="/assets/icons/android-icon-192x192.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/assets/icons/favicon-16x16.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/assets/icons/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="96x96" href="/assets/icons/favicon-96x96.png" />
<link rel="manifest" href="/assets/manifest.json" />
<meta name="msapplication-TileColor" content="#ffffff" />
<meta name="msapplication-TileImage" content="/assets/icons/ms-icon-144x144.png" />
<meta name="theme-color" content="#ffffff" />
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=ru" async defer></script>
</head>
<body>
<div id="app" class="full-height"></div>
</body>
</html>
ФАЙЛ FRONT/APP.JSX
import React from 'react'
import { Router, browserHistory } from 'react-router/es'
import routes from './routes'
const App = () => (
<Router history={ browserHistory } routes={ routes }/>
)
export default App
ФАЙЛ FRONT/ROUTES/HELPERS.JS
const errorLoading = (err) => {
console.error('Dynamic page loading failed', err)
}
const loadRoute = (cb) => (module) => cb(null, module.default)
const pageChangedTransition = (prevState, nextState) => {
if (prevState.location.pathname !== nextState.location.pathname) {
window.scrollTo(0, 0)
}
}
export {
loadRoute,
errorLoading,
pageChangedTransition,
}
ФАЙЛ FRONT/SERVICES/XHR.JS
import request from 'superagent'
const RequestWrap = (fn) => {
const promise = new Promise((resolve, reject) => {
fn.end((err, response) => {
if (err) {
reject(err)
}
resolve(response.body)
})
})
promise.end = promise.then
promise.abort = fn.abort.bind(fn)
return promise
}
const getJSON = (url, params = null) => (
RequestWrap(request.get(url)
.query(params)
.set('Content-Type', 'application/json;charset=utf-8')
.accept('application/json'))
)
const sendJSON = (url, data) => (
RequestWrap(request.post(url)
.set('Content-Type', 'application/json;charset=utf-8')
.accept('application/json')
.send(data))
)
const sendForm = (url, data) => (
RequestWrap(request.post(url)
.set('Content-Type', 'application/x-www-form-urlencoded')
.send(data))
)
const sendData = (url, data) => (
RequestWrap(request.post(url)
.set('Content-Type', 'text/plain')
.accept('application/json')
.send(data))
)
export default {
getJSON,
sendJSON,
sendForm,
sendData,
}
ФАЙЛ FRONT/CONTAINERS/APP.JSX
import React, { PropTypes } from 'react'
import ReactCSSTransitionGroup from 'react-addons-css-transition-group'
import '../../scss/index.scss'
import '../../scss/animations.scss'
const App = ({ location, children }) => (
<ReactCSSTransitionGroup
className="full-height"
component="div"
transitionName="page-transition"
transitionEnterTimeout={ 500 }
transitionLeaveTimeout={ 500 }
>
{ React.cloneElement(children, {
key: location.pathname,
}) }
</ReactCSSTransitionGroup>
)
App.propTypes = {
location: PropTypes.shape().isRequired,
children: PropTypes.node.isRequired,
}
export default App
ФАЙЛ FRONT/COMPONENTS/SHARED/CHECKBOX.JSX
import React, {Component, PropTypes} from 'react'
import uniqueId from 'lodash/uniqueId'
import classnames from 'classnames/bind'
import styles from './styles.scss'
const cx = classnames.bind(styles)
export default class AlCheckbox extends Component {
static propTypes = {
label: PropTypes.node,
name: PropTypes.string.isRequired,
className: PropTypes.string,
inputClassName: PropTypes.string,
value: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
}
static defaultProps = {
value: false,
}
state = {
checkboxID: uniqueId('al_checkbox_')
}
render() {
const {
label,
value,
className,
inputClassName,
} = this.props
const {
checkboxID
} = this.state
return (
<div className={ cx('checkbox', 'form-input', className) }>
<input
id={ checkboxID }
type="checkbox"
className={ cx('form-control', inputClassName) }
value={ value }
onChange={ this.onChange} />
<label htmlFor={ checkboxID }>
{ label }
</label>
</div>
)
}
onChange = (e) => {
console.log(e)
}
}
ФАЙЛ FRONT/COMPONENTS/SHARED/INPUT.JSX
import React, { Component, PropTypes } from 'react'
import MaskedInput from 'react-input-mask'
import cx from 'classnames'
import _ from 'lodash'
import '../../../../scss/Shared/Input/index.scss'
export default class AlInput extends Component {
static propTypes = {
type: PropTypes.string,
label: PropTypes.string,
name: PropTypes.string.isRequired,
className: PropTypes.string,
inputClassName: PropTypes.string,
value: PropTypes.string.isRequired,
validationErrors: PropTypes.array,
onChange: PropTypes.func.isRequired,
onFocus: PropTypes.func,
onLostFocus: PropTypes.func,
}
static defaultProps = {
type: 'text',
value: '',
onChange: _.noop,
onFocus: _.noop,
onLostFocus: _.noop,
}
state = {
inputID: _.uniqueId('al_input_'),
inputFocused: false,
}
renderValidationState = (value, validationErrors) => {
if (validationErrors) {
const errorsToRender = [ <i key='icon' className='fa fa-exclamation-triangle'/> ]
const errorMessage = validationErrors[0]
const noWrap = !!validationErrors[1]
if (noWrap) {
errorsToRender.push(`${errorMessage}`)
} else {
errorsToRender.push(`${errorMessage} ${value}`)
}
return errorsToRender
}
return value
}
renderInput = (type) => {
const {
inputClassName,
value,
validationErrors,
} = this.props
const {
inputID,
} = this.state
const inputCommonProps = {
id: inputID,
type,
className: cx('form-control', inputClassName, { error: validationErrors }),
value,
onChange: this.onChange,
onFocus: this.inputOnFocus,
onBlur: this.inputOnLostFocus,
}
switch (type) {
case 'phone': {
return (
<MaskedInput
{ ...inputCommonProps }
mask="+7 (999) 999-99-99"
/>
)
}
default: {
return (
<input
{ ...inputCommonProps }
/>
)
}
}
}
render() {
const {
type,
label,
value,
validationErrors,
className,
} = this.props
const {
inputID,
inputFocused,
} = this.state
const isInputActive = inputFocused || (value && value.length > 0);
return (
<div className={ cx('al-input', 'form-input', className) }>
{ this.renderInput(type) }
{ label ?
<label
htmlFor={ inputID }
className={ cx({ active: isInputActive, error: validationErrors }) }
>
{ this.renderValidationState(label, validationErrors) }
</label> : null
}
</div>
)
}
onChange = (e) => {
const {
name,
type,
} = this.props
const value = this.parseValue(type, e.target.value)
this.props.onChange(name, value)
}
inputOnFocus = () => {
const {
name,
} = this.props
this.setState({
inputFocused: true,
})
const field = _.last(name.split('.'))
this.props.onFocus(field)
}
inputOnLostFocus = () => {
const {
name,
} = this.props
this.setState({
inputFocused: false,
})
const field = _.last(name.split('.'))
this.props.onLostFocus(field)
}
parseValue = (type, value) => {
switch (type) {
case 'phone': {
return value.replace(/[^+\d]*/ig, '')
}
default: {
return value
}
}
}
}
ФАЙЛ FRONT/COMPONENTS/SHARED/LOADINGBUTTON.JSX
import React, { Component } from 'react'
import LaddaButton from 'react-ladda'
import * as Constants from 'react-ladda/dist/constants'
import _ from 'lodash'
import '../../../../scss/Shared/LoadingButton/index.scss'
class LoadingButton extends Component {
static propTypes = LaddaButton.propTypes
static defaultProps = {
onClick: _.noop,
}
onClick = (e) => {
e.preventDefault()
e.stopPropagation()
const {
loading,
} = this.props
if (!loading) {
this.props.onClick.apply(this, arguments)
}
}
render() {
return (
<LaddaButton
{ ...this.props }
onClick={ this.onClick }
/>
)
}
}
export {
LoadingButton as default,
Constants,
}
ФАЙЛ FRONT/COMPONENTS/SHARED/NAVITEM.JSX
import React, { PropTypes } from 'react'
import cx from 'classnames'
const NavItem = ({ children, className, accent }) => (
<li
role="presentation"
className={ cx(className, { accent }) }
>
{ children }
</li>
)
NavItem.propTypes = {
children: PropTypes.node.isRequired,
className: PropTypes.string,
accent: PropTypes.bool,
}
NavItem.defaultProps = {
className: '',
accent: false,
}
export default NavItem
ФАЙЛ FRONT/COMPONENTS/SHARED/NOWRAP.JSX
import React, { PropTypes } from 'react'
import cx from 'classnames'
const NoWrap = ({ className, children, ...props }) => (
<span
className={ cx(className, 'nowrap') }
{ ...props }
>
{ children }
</span>
)
NoWrap.propTypes = {
className: PropTypes.string,
children: PropTypes.node.isRequired,
}
NoWrap.defaultProps = {
className: null,
}
export default NoWrap
ФАЙЛ FRONT/COMPONENTS/SHARED/SCROLLCHOR.JSX
import React, { PropTypes } from 'react'
import Scrollchor from 'react-scrollchor'
const AlScrollchor = ({ animate, navHeight, ...props }) => {
let newProps = {
animate,
...props,
}
if ((animate && animate.offset) || navHeight) {
newProps = {
...newProps,
animate: {
...animate,
offset: -navHeight + ((animate && animate.offset) || 0),
},
}
}
return (
<Scrollchor
{ ...newProps }
/>
)
}
AlScrollchor.propTypes = {
...Scrollchor.propTypes,
navHeight: PropTypes.number,
}
AlScrollchor.defaultProps = {
navHeight: 80,
}
export default AlScrollchor
ФАЙЛ FRONT/COMPONENTS/SHARED/SELECT.JSX
import React, { Component, PropTypes } from 'react'
import Select from 'react-select'
import cx from 'classnames'
import _ from 'lodash'
import '../../../../scss/Shared/Select/index.scss'
export default class AlSelect extends Component {
static propTypes = {
options: PropTypes.arrayOf(PropTypes.object).isRequired,
value: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
label: PropTypes.string,
className: PropTypes.string,
selectClassName: PropTypes.string,
tabIndex: PropTypes.string,
onChange: PropTypes.func,
}
static defaultProps = {
type: 'text',
value: '',
onChange: _.noop,
}
state = {
selectID: _.uniqueId('al_select_'),
}
renderLabel = (label) => {
if (label) {
const {
selectID,
} = this.state
return (
<label
htmlFor={ selectID }
className="active"
>
{ label }
</label>
)
}
}
render() {
const {
options,
value,
label,
className,
tabIndex,
} = this.props
return (
<div className={ cx('al-select', 'form-input', className) }>
<Select
className="form-control"
options={ options }
value={ value }
clearable={ false }
searchable={ false }
tabIndex={ tabIndex }
onChange={ this.onChange }
/>
{ this.renderLabel(label) }
</div>
)
}
onChange = ({ value }) => {
const {
name,
} = this.props
this.props.onChange(name, value)
}
}
ПРИЛОЖЕНИЕ В. ПРЕЗЕНТАЦИЯ
Размещено на Allbest.ru
...Подобные документы
Принципы работы систем контроля и управления доступом, принцип их работы и оценка возможностей. Сравнительное описание методов идентификации. Разработка информационно-компьютерной системы контроля и управления доступом. Создание аппаратной подсистемы.
дипломная работа [1,7 M], добавлен 26.07.2013Технологии управления доступом в помещение. Организационно-управленческая характеристика ООО "Новые информационные технологии". Анализ системы технического и программного обеспечения. Разработка проекта системы контроля и управления доступом "Кодос".
дипломная работа [71,6 K], добавлен 16.01.2014Особенности решения задачи контроля и управления посещением охраняемого объекта. Создание системы как совокупности программных и технических средств. Классификация систем контроля и управления доступом. Основные устройства системы и их характеристика.
презентация [677,7 K], добавлен 03.12.2014Назначение, классификация и состав системы контроля управления доступом. Основные характеристики биометрических средств идентификации личности. Идентификация пользователя по радужной оболочке глаз. Разработка алгоритма функционирования устройства.
дипломная работа [1,1 M], добавлен 25.11.2014Анализ существующих систем контроля и управления доступом различных фирм-производителей. Анализ технических и эксплуатационных характеристик различных систем, разработка системы контроля и управления доступом. Предложение плана реализации системы.
дипломная работа [2,7 M], добавлен 07.06.2011Организационные основы защиты информации на предприятии. Общие принципы построения систем контроля и управления доступом. Виды запирающих устройств. Аппаратура и материалы, методика и порядок выполнения работы. Базовое программное обеспечение проекта.
дипломная работа [4,7 M], добавлен 30.06.2011Описание возможностей системы контроля и управления доступом, область ее деятельности и нормативная база использования, принципы функционирования. Обзор российского рынка, тенденции и перспективы его дальнейшего расширения. Этапы разработки и внедрения.
курсовая работа [1,8 M], добавлен 15.01.2015Организационные основы защиты информации на предприятии. Общие принципы построения систем контроля и управления доступом. Характеристика объекта, текущего оборудования и программного обеспечения. Классификация воздушных и воздушно-тепловых завес.
дипломная работа [5,7 M], добавлен 13.04.2014Понятие, назначение, задачи и классификация системы контроля и управления доступом, ее основные компоненты. Сравнительный анализ деятельности производителей данных систем: Legos, Parsec, PERCo. Выбор архитектуры системы, оборудование и его размещение.
дипломная работа [7,7 M], добавлен 07.06.2014Автономные, сетевые и интегрированные контроллеры - интеллектуальный элемент системы контроля управления доступом. Управление локальными, централизованными и распределенными СКУД. Характеристика iSecure Pro как самостоятельной микропроцессорной системы.
реферат [2,6 M], добавлен 23.01.2011Проведение анализа в области идентификации личности по биометрическим параметрам. Формирование массива данных из исходной информации для подсистемы контроля управления доступом с аутентификацией по речевому сигналу. Способ проверки подлинности голоса.
курсовая работа [3,1 M], добавлен 29.08.2015Система контроля и управления доступом как базовый компонент интегрированных систем. Структура и основные элементы систем видеонаблюдения. Области применения и обзор программного обеспечения систем видеонаблюдения. Интегрированные системы безопасности.
дипломная работа [1,8 M], добавлен 25.07.2015Ознакомление с основными возможностями и особенностями программно-аппаратного комплекса Менуэт 2000. Назначение системы управления доступом (СУД), ее возможности, режимы работы. База данных объекта контроля. Менеджер сети замков системы Менуэт 2000.
лабораторная работа [1,6 M], добавлен 17.01.2011Назначение и устройство микропроцессорной системы контроля. Описание функциональной схемы микропроцессорной системы контроля. Расчет статической характеристики канала измерения. Разработка алгоритма функционирования микропроцессорной системы контроля.
курсовая работа [42,0 K], добавлен 30.08.2010Разработка автоматизированной информационной системы для учета и контроля выполнения ремонтных работ, и предоставления услуг по разработке программного обеспечения компании "МегионСофтОйл", разработка алгоритмов приложений программной системы и модулей.
дипломная работа [5,3 M], добавлен 29.06.2012Система контроля и управления доступом на предприятии. Анализ обрабатываемой информации и классификация ИСПДн. Разработка модели угроз безопасности персональных данных при их обработке в информационной системе персональных данных СКУД ОАО "ММЗ".
дипломная работа [84,7 K], добавлен 11.04.2012Общая характеристика и функциональное назначение проектируемого программного обеспечения, требования к нему. Разработка и описание интерфейса клиентской и серверной части. Описание алгоритма и программной реализации приложения. Схема базы данных.
курсовая работа [35,4 K], добавлен 12.05.2013Системы контроля и управления доступом: контроллерные и программные. Технические тенденции их развития. Структура и элементы систем видеонаблюдения, области их применения и программное обеспечение. Интегрированные системы безопасности, уровни интеграции.
дипломная работа [1,7 M], добавлен 13.10.2015Средства и технологии разработки приложений баз данных. Компоненты управления доступом к БД. Описание программного окружения доступа к данным. Механизм получения и отправки данных. Специфика связи внутреннего представления с интерфейсом приложения.
презентация [29,4 K], добавлен 19.08.2013Общая характеристика, состав и классификация систем управления доступом. Обеспечения сохранности информации. Составление рекомендации по наиболее рациональной организации и применению технических систем управления доступом в органах внутренних дел.
курсовая работа [46,3 K], добавлен 14.01.2012