mattyx96's avatar

Architecture of an ERP software

Hi guys,

I'm designing a new software (Laravel + React + SQL) that will manage different stuff for companies.

  • There is a father company and many child companies.
  • Each company can have an Admin and different types of employee.
  • The staff of the father company can do actions on the father and child companies ( admin can do everything, a salesman can do just sales stuff )
  • The admin of a child company can do almost everything on his company ( certain data can be only written on the db by the admin of the father company ) and the employees can do role-based actions but only on their company.

Once the users login in the app, it will show them different results an submenus based on the role of the user. For example Admin will see also the control panel menu...

The front-end part will show the right view depending on if the user is an Admin of what company etc.

To make this I'm thinking about permissions to give to a user to make him Admin or Employee or what else.

Issue #1 I'm not sure about the best way to make a secure login, I'm thinking about Passport with only one users table, the system will provide a response depending on the role of the user.

Issue #2 This issue is related to the APIs authentication. I saw Laravel policies but I was thinking about using 2 middlewares: the first one for checking if the user token sent with the request corresponds to a user and the second one to check if the user have the permission to call that endpoint, but I haven't idea on how set properly the permission needed for call the single endpoint... can you please suggest the best practice?

If you think that my architecture is not too good, i'm totally open for suggestions.

Thanks for the help.

0 likes
3 replies
douglasakula's avatar

Your scope is wide and architecture could be diverse especially for an enterprise architecture. I would assume at least you have tiers / layers so we have the database layer (your database), application layer (laravel app) and presentation layer (react) all of them to be hosted on different server or nodes. Such an architecture would mean you expose application layer APIs that will be consumed by the client app. (React).

Now to the issues you have raised.

The most secure login IMO is OTP as it means an 4 or 6 digit code is sent to the user who has to submit it client side for validation server side. If you are paranoid enough about security and users can have gmail accounts then I would consider using gmail authentication into the apps - for reasons such as they have spend years thinking about security and I would therefore ride upon their leanings. They also have alerts when a strange device accesses the email account. If you however control all the user data - then phone number and an OTP that is sent to the users every time they login is secure enough.

On API authentication. - Every request has to be authenticated by a user specific time-bound token supplied in the login request body. Authorization should should also happen across the two layers - client side as well as server side. Ideally when a user logs in - part of response body should be the roles and permission matrix for the user. This can guide the client side implementation on what the user can see or do. Nevertheless the server side implementation should also run the check in its API gateway to validate that the user action is white-listed in the users roles and permission matrix.

rybbyystones's avatar

I checked out that thread on ERP software architecture. It's a deep dive into building solid systems for business.

Please or to participate in this conversation.