Перейти до

Требуется внесение таблицы "все-ко-всем"


Рекомендованные сообщения

Вопрос дополнения базы данных и биллинга таблицей "все-ко-всем", продиктованы следующими потребностями.

Есть модуль "Филиалы".

При подключении данного модуля возникает следующая проблема.

Не возможно подключить например город или филиалы для филиала, потому как филиал получает доступ ко всей информации о других филиалах.

Нужно создать условия при которых филиал сможет самостоятельно вносить пользователей, адреса, вести склад при этом не видя информацию в материнской базе и других филиалах.

Далее филиал не может создавать филиал.

 

Такие задачи решаются созданием таблицы "все-ко-всем" в которой формируется каскадное вложение филиалов и связкой соответствующих таблиц сервисов.

При правильном построении форм запроса и проверке на стороне сервера прав, филиал сможет получать доступ только к разрешенным ему модулям, и только его позициям в базе.

Более того филиал сможет создавать свои филиалы, контролировать в них данные.

 

Приветствуется любая критика и предложения,

помощь в консультации и программировании.

Спонсирование заинтересованных сторон, приветствуется.

Відредаговано pavlabor
Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, olsasha сказал:

Думаю логично будет назвать например - "матрица прав и доступа" для пользователя.

Наверно расширенная "матрица прав и доступа" больше подойдет к разделу "Права, введение расширенной настройки прав"

 

Здесь может правильней назвать "строитель дерева".

Работает он как связка  адреса "город + улица + дом".

Задача работа филиалов.

Когда есть дирекция, ей подчиняется пять филиалов, которые могут также создать по несколько филиалов, а те тоже могут создать филиалы и так бесконечно.

При этом каждая ветка филиалов, позволит например просматривать исключительно свой склад и склады филиалов.

 

Практическое решение.

Есть оператор у которого есть сети в нескольких городах, при чем в каждом городе по несколько районов и там свой филиал, более того руководство районного филиала решило в качестве стимулирования работников отдать сетки на Аутсо́рсинг мастерам с отчислением не зарплаты а процента от оборота.

При этом данная таблица позволяет организовать контроль за активами только свои и всех нижестоящих филиалов.

При этом филиал не сможет смотреть активы дирекции и чужих филиалов, а будет просматривать только свои активы и активы своих филиалов.

Последний филиал, будет видеть только свои активы.

Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, pavlabor сказал:

Вопрос дополнения базы данных и биллинга таблицей "все-ко-всем", продиктованы следующими потребностями.

Не возможно подключить например город или филиалы для филиала, потому как филиал получает доступ ко всей информации о других филиалах.

Нужно создать условия при которых филиал сможет самостоятельно вносить пользователей, адреса, вести склад при этом не видя информацию в материнской базе и других филиалах.

Сорри, но когда-то в 2000-х решал подобную проблему ...

Ваше видение, ИМХО, не совсем верное :(

Тут нет таблиц "все-ко-всем" ...

Есть древовидная структура с разграничением прав доступа по множителю на уровень "ветки" ... Начиная от Контрагента (или объеденения онных)

Как правило такая структура организуется на уровне программного кода PSQL обычными union запросами ...  (Как Вы выразились на стороне сервера)

Сначала выбираются разрешительные ветки контрагентов (и/или из адресов обслуживания), а потом уже всё что с ними связано ...

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)
11 часов назад, Stroj сказал:

Сорри, но когда-то в 2000-х решал подобную проблему ...

Ваше видение, ИМХО, не совсем верное :(

Тут нет таблиц "все-ко-всем" ...

Есть древовидная структура с разграничением прав доступа по множителю на уровень "ветки" ... Начиная от Контрагента (или объеденения онных)

Как правило такая структура организуется на уровне программного кода PSQL обычными union запросами ...  (Как Вы выразились на стороне сервера)

Сначала выбираются разрешительные ветки контрагентов (и/или из адресов обслуживания), а потом уже всё что с ними связано ...

 

Собственно это стандартная задача "SQL для начинающих. Часть 3"

Связь многие ко многим

В некоторых случаях требуется многочисленные связи по обе стороны отношений. Например, каждый заказ может содержать множество товаров. И каждый товар может присутствовать во многих заказах.

Для такой связи нам потребуется создать дополнительную таблицу:

graph_4.png

 

Если мы читаем доку на юбиллинг то видим

-  Да, можно сделать для филиала сколько угодно администраторов, либо передать администратору под управление сколько угодно филиалов.

 

То есть такие связки в базе существуют на уровнях "филиал - администратор" и т.д.

CREATE TABLE `branchesadmins` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `branchid` int(11) NOT NULL,
  `admin` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `branchescities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `branchid` int(11) NOT NULL,
  `cityid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE `branchesservices` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `branchid` int(11) NOT NULL,
  `serviceid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `branchestariffs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `branchid` int(11) NOT NULL,
  `tariff` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `branchesusers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `branchid` int(11) NOT NULL,
  `login` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Но такой связки я не вижу на уровне  "филиал - филиал".

Наличие двух таких таблиц позволяет создавать не одноуровневую схему "дирекция - филиалы", а масштабируемую, многоуровневую схему  "дирекция - филиалы  - филиалы".

На уровне модулей это позволит получать выборки по фильтрам

- только для себя,

- только для себя и моих филиалов.

и ставить ограничение на просмотр активов с других филиалов.

 

Самый практичный вариант это как написано в уроке "потребуется создать дополнительную таблицу",

на уровне запросов, процедур, и прочей серверной приблуды, это сорвет крышу.

 

Я хочу донести идею, возможно что не так выразился, нет проблем уточню.

 

Відредаговано pavlabor
Ссылка на сообщение
Поделиться на других сайтах

Сорри что выпал из темы ... Итак, в не привязки к юбиллинг :(

Как я решал для себя:

Есть "грубо" 3 таблицы:

"owners" - Владельцы чего либо (будь то директор, филиал, склад или товар/услуга)

Структура простейшая:

{

id  - Идентификатор обьекта

sub - Вышестояший идентификатор 

ver - Версия записи (последнего изменения)

Name - наименование ...

Permission - Символьный набор прав действия ака: "wrade" (Write, Read, Add, Delere, Erase).

                      Притом Delete и Erase - это совсем  разное поведение ...

                      Delete - это присваивание "-1" флаг удалено полю ver, Erase - полное удаление всех записей (only superadmin). ...

}

 

Любые изменения не удаляли/редактировали запись, а создавали дубликат с ver+1 ...

Соответственно в выборках всегда бралась "старшая модель", но с возможностью копнуть в историю ...

 

Далее

Была таблица: Actions.

Грубо - говоря заголовок "расходной накладной", откуда- и куда ...

 

Поля:

{

id

Дата/Время,

Ver (версия как и в предыдущей таблицы)

From (С кого)

To (Кому)

Description (Примечание)

}

 

Ну и напоследок таблица Details ...

{

id,

Action id,,

Ver,

Object_id,

Quantity,

Cost

}

Деталировка что, сколько и за сколько передали ...

 

Суть в чем: перавая таблица -  объекты оперирования, любые ...

Вторая описывает с кого и на что передается (притом не важно что), общий принцип:

Ничто ниоткуда не возникает, и никуда бесследно не пропадает!!!

Нет начальных остатков, нет "переучетов" (в классическом смысле), всё считается на лету ...

Ну и последняя таблица - что конкретно, в каком к-ве и по какой цене передается... 

 

 

Это просто общий набросок который я видел, но скорее всего, не  просто не применимый, ибо сомневаюсь что интегрируется в существующую версия биллинга :(

Посему, я со своей идеей (пасую), в 3 месяца - это не реализовать :(

Відредаговано Stroj
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від sanyadnepr
      Приветствую всех.
      Подскажите пожалуйста где копнуть и нет ли проблемы со стороны протокола взаимодействия сити24 или возможно не учтена необходимая проверка в модуле сити24 в Ubilling, пока писал понял что похоже в проверке payID, но это не точно.  
      Недавно обнаружилось с сити24 начали прилетать дубликаты платежей, в целом платежей мало, два одинаковых запроса Pay с одинаковым transactionID и payID в одну секунду одному платежному ID при этом биллинг "думает" примерно чуть больше минуты и отвечает одним ответом <result>0</result>, сити24 утверждает что ответ они не получили и по протоколу дальше повторяет запросы дублем, биллинг ответ и так по кругу, сити24 спрашивает каким образом с одинаковым payID от сити24 билл продолжает обрабатывать запросы и пополнять абоненту счет раз в 5 минут примерно, на одну и туже сумму, ведь этот payID уже был обработан предполагают сити24 согласно протоколу.
      Конечно есть вопрос к сити24 зачем они дублем присылают два запроса, но они отвечают что эта ситуация учтена в протоколе и проблема на стороне биллинга, потому что он пополняет счет по уже обработанному одинаковому payID.
      При этом transactionID в дублях одинаковый, но с каждым новым дублем разный.
      Если зафаерволить запросы от сити24, но оставить возможность отвечать то после блокировки билл отправляет 2-3 минуты 6 ответов <account>0001</account>  <result>0</result>.
      После снятия блокировки, дубли и платежи нескольких проблемных абонентов прилетают так же по кругу, при этом и с некоторыми новыми пополнениями происходит аналогичная ситуация.
      В openpayz в платежах transactionID и не видно payID.
    • Від nightfly
      Ubilling 1.4.3 rev 9058 The Bladewood Grove
       
      Зміни в структурі БД. alter.ini: нові опції OPHANIMFLOW_ENABLED та OPHANIMFLOW_URLS котрі вмикають та керують інтеграцією з OphanimFlow. alter:ini: нова опція PHOTOSTORAGE_POSTPROCESSING, що вмикає післяобробку зображень при завантаженні в Сховище зображень. alter:ini: нова опція PHOTOSTORAGE_WATERMARK, що вмикає розміщення вотермарки на всіх зображеннях, що завантажуються. alter:ini: нова опція PHOTOSTORAGE_RECOMPRESS, що вмикає зміну компрессії завантажених зображень. alter:ini: нова опція PHOTOSTORAGE_AUTORESIZE, що вмикає автоматичне та лагідне масштабування зображень конячих розмірів. alter:ini: нова опція PHOTOSTORAGE_DRAWIMGINFO, що вмикає вдруковування в зображення відлагоджувальної інформації. alter.ini: нова опція ONDEMAND_CHARTS, що вмикає відкладене завантаження графіків завантаження користувацької смуги. userstats.ini: нова опція OPHANIM_ENABLED, що вмикає інтеграцію OphanimFlow в кабінеті користувача. Модуль Заздрість: тепер авторизаційні дані пристроїв, не відображаються в списку пристроїв. Модуль “Заздрість”: при створенні та редагуванні пристроїв, для полів “пароль” та “enable пароль” тепер використовуються інпути паролів. Модуль “Заздрість”: заздрісним пристроям додано нове поле “Порт”. Тепер в скриптах можна використовувати, відповідний макрос {PORT}. Модуль “Статистика трафіку користувача”: проведено радикальний рефакторинг. Модуль “Статистика трафіку користувача”: додано опційну можливість, відображення трафіку отриманого з OphanimFlow. Модуль “Статистика трафіку користувача”: виправлено проблему невірного відображення залишку коштів на кінець місяця, при використанні Ішимури. Модуль “Статистика трафіку користувача”: додано можливість відображення графіків за останню годину з OphanimFlow. Модуль “Користувачі”: додано опційну можливість, відображення трафіку отриманого з OphanimFlow. Модуль “Сховище зображень”: тепер додатково перевіряє завантажувані зображення на тему їх валідності. Модуль “Фінансові операції”: виправлено відображення суми платежів користувача. Remote API: новий виклик ophanimtraff, який просто бере і синхронізує локальну БД з віддаленими джерелами OphanimFlow. Remote API: виклик userbynum тепер також опційно містить поле з “Платіжним ID” користувача. Глобально: у всіх полях вводу паролів, окрім форми входу, тепер відображається елемент керування “показати/приховати” пароль. Кабінет користувача: в модулі “Трафік” додано опційну можливість, відображення трафіку отриманого з OphanimFlow. Кабінет користувача: в модулі “Трафік” виправлено проблему невірного відображення залишку коштів на кінець місяця, при використанні Ішимури. Кабінет користувача: в модулі “Відеоспостереження” для NVR WolfRecorder замінено розділювач попередньо заповнених даних авторизації. OpenPayz: додано frontend portmonemulti, для отримання платежів від різних контрагентів. Інформацію по контрагентам бере з біллінгу, також використовую розширену інформацію контрагента. Платіжна система в контрагенті мусить бути створена, як PORTMONE 1984tech: додано функціонал генерації RPZ для isc-bind, спасибі @misterromanbush  
      Повний чейнджлог
      Оновлена демка
       

    • Від mac
      Здається, після оновлення PHP 7.4 до PHP 8.2 feesharvester припинив працювати:
       
      /usr/local/bin/curl "http://127.0.0.1/billing/?module=remoteapi&key={SERIAL}&action=feesharvester" <br /> <b>Fatal error</b>: Uncaught TypeError: Unsupported operand types: string - string in {UBPATH}/billing/api/libs/api.fundsflow.php:570 Stack trace: #0 {UBPATH}/billing/modules/remoteapi/feesharvester.php(22): FundsFlow-&gt;harvestFees('2024-01') ...  
      Невеличке розслідування врешті з'ясувало, що це через наявність пробілу у деяких логінах абонентів. Як так сталося? Тому що інколи був неуважно додан трейлінг пробіл до номеру будинка і цей пробіл потрапив до логіну абоненту. Логін абоненту неможливо змінити ніяким чином штатними засобами. Я не розглядаю створення нового абонента для усунення помілки.

      Був обран такий шлях вирішення проблеми. Заміну функції php explode() знайшов у мережі. Мабуть це станеться в нагоді:

       
      diff api.fundsflow.php.bak api.fundsflow.php.new 559c559 < $eachfee = explode(' ', $eachline); --- > $eachfee = preg_split("~(?<!\\\\)(?:\\\\{2})*'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(*SKIP)(*F)|\s+~s" , $eachline);  
    • Від Dilan
      Собственно ищу кто сделает такую связку с нуля под ключ. Тз высылаю в личку. Заранее спасибо.
    • Від ukrtelekom
      Доброго часу!
      Шукається адміністратор віддалений для разової роботи по коригуванню працюючого Ubilling з мікротами. Якщо стосунки зклєяться- то до постійної додаткової копійки. 
      Всім заздалегідь дякую. Хейти, бажано не писати. Контакти в приватні повідомлення або O73283344O
×
×
  • Створити нове...