Zarządzanie kontami klientów w aplikacji pod Symfony3

Zarządzanie kontami klientów w aplikacji pod Symfony3
MA
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:26
0

Hej,

od jakiegoś czasu piszę aplikację w Symfony (długa i złożona historia - jak ktoś ciekawy, to opiszę)...
Jako że widzę (skromne, ale jednak) zapotrzebowanie (+/- kilkanaście klientów w Polsce), to chciałbym żeby aplikacja była na tyle elastyczny, żeby można było udostępniać/sprzedawać konta z indywidualnymi danymi aplikacji w bazie danych (mam nadzieję, że ostatnie zdanie nie brzmi zbyt kolokwialnie).

W związku z powyższym:

  1. Czy wystarczy dodać identyfikator konta do tabel?
    1.1. Czy do wszystkich? Wydaje mi się że bez tych przejściowych many-to-many
    1.2. Jak wtedy z bezpieczeństwem? Jak "odgrodzić" konta od siebie?
    1.3. Mam obawę, że napisanie systemu zarządzającego też niesie dużo problemów, dlatego spytam się również:
  2. Czy jest jakiś moduł który polecacie taki "accounting? Czy jest moduł ktory oferuje zarazem możliwość wielu kont jak i zarządzanie nimi?
    2.1. Jestem prawie pewny że FOSUserBundle nie oferuje takiej możliwości. Może się mylę?
    2.2. Jeszcze 2 miesiące temu SonataAdminBundle nie działała z Symfony3, a dodatkowo wydaje mi się, że nie oferuje takiej możliwości. Może się mylę?

Pozdrawiam i z góry dziękuję za radę/rady

edytowany 5x, ostatnio: mathieus
PE
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 3 lata
  • Postów:111
0

FOS oferuje możliwość obsługi kont użytkowników. Z Twojego opisu wynika, że potrzebujesz właśnie czegoś takiego. Treść tworzona przez danego użytkownika może być przecież przypisana do danego użytkownika (właśnie przez dodanie identyfikatora tego użytkownika do tabeli). Co do sonaty to jakiś czas temu instalowałem ją w projekcie symfony 3 i niemalże wszystko było ok. Jedyny problem (projekt był mały więc pewnie tych problemów może być więcej ) to była integracja z fosem. O ile użytkownikami mogłem zarządzać to nie udało mi się podpiąć menu użytkownika takiego jak jest na 4programmers (avatar itp). Na szczęście tego nie potrzebowałem za bardzo.

MA
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:26
0

dziękuję, niestety trochę nieprecyzyjnie się wyraziłem (mea culpa - aż mi trochę głupio). Ma być w aplikacji pewna różnica pomiędzy kontem klienta, a kontem użytkownika aplikacji. Konto klienta może zawierać wiele loginów (abstrakcyjny przykład: 6 użytkowników firmy ABC, z czego np. dwaj zarządcy, jeden doradca, trzech dostawców treści + 11 użytkowników firmy ZYX + 3 użytkowników firmy DEF). Mogę dodać tabelę wiele do wielu typu user_account,jednak pozostają niejasne dla mnie wymienione kwestie (za wyjątkiem pytania 2.2 - dzięki - sprawdzę to na dniach).

edytowany 2x, ostatnio: mathieus
0

to co chcesz osiągnąć to SaaS - Software as a Service.
Osobiście nie szedłbym w stronę, o której piszesz. Wszystkie wpisy musiałbym oznaczać id = firmy. Poszedłbym raczej w stronę 1 firma = 1 baza.
Robisz np. jakiś panelik w którym zakładasz firmę -> rezultatem jest puszczenie skryptu generującego bazę z adminem który może tworzyć konta w ramach firmy + tworzysz katalog z apką defaultową.

Wydaje mi się, że posiadanie jednej bazy dla wielu klientów ma dwie głowne wady:

  1. klient A przez przypadek może zobaczyć dane klienta B. Przy wielu bazach jest mniejsza szansa, bo błąd musiałby być w logice zaczytującej dane do bazy po subdoemenie. Jeżeli masz jedną bazę, to w zapytaniach musisz pilnować warunków where tenant_id = ...
  2. performance. Załóżmy, że średnio klient ma 1 000 000 rekordów w jakiejś tabelce, a Ty masz 100 klientów... smile

do tego dochodzi temat kupowania dostępu? może opisz dokładniej co chcesz zrobić. To fajny temat jest.

0

przepraszam zapędziłem się powyżej. Jedna baza per firma ALE jedna aplikacja! Przepraszam

MA
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:26
0

Super... dzięki Wybitny Wąż... właśnie liczę na pragmatyczne podejście. Jeszcze poszukam w internecie: jak często stosuje się Twoje rozwiązanie i jakie są wady (i ukryte niebezpieczeństwa). Sprawdzę też w internecie, czy często stosują SaaS pod Symfony3 (dyskusje/bundle/źródła github).... być może społeczność Symfony opanowało zagadnienie wystarczająco dobrze...

Jak chodzi o kupowanie dostępu to zamierzam rozwiązać najmniejszą linią oporu (podobnie jak Twoje rozwiązanie):

Jakiś czas temu, przez kilka niezwykle wyczerpujących miesięcy, kodziłem przy aplikacji typu legacy (spadkowa) obsługującą kilkadziesiąt klientów (firm) i kilkaset użytkowników.
Postaram się ją streścić:

  • pierwotnie napisana na Yii (chyba 60% procent kodu to bajzel dopisywany przez kilku koderów przez kilka lat - rdzenny kod też tak łatany że segregacja m-v-c prawie nie istniała)
  • kilkadziesiąt tabel w bazie danych (może nawet więcej - za pierwszym razem dostałem oczopląsów - także modyfikowana na "łapu capu")
  • każda firma miała swoje id (czyli to rozwiązanie które opisałem na początku)
    Jak tam realizowało się płatności? Naturalnie był moduł płatności, nie tylko kont, ale też usługi i kupony... tylko było małe "ale"... nie był on w zasadzie używany.
    Niemal każda firma wolała pisać e-maile, bądź dzwinić do "właściciela" tej aplikacji, niż się bawić w panelu administracyjnym (szczęśliwie, bo byłoby to mocno ryzykowne).

W przypadku mojej aplikacji, skoro jest "jeszcze bardziej dedykowana" do pewnej branży, to sprawę płatności zostawię na koniec bądź - zupełnie pominę.

pozdrawiam

edytowany 2x, ostatnio: mathieus
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)