Intranet PHP+MySQL. Duda con los permisos de usuarios

Iniciado por Antonio_1987, 1 Mayo 2015, 22:03 PM

0 Miembros y 1 Visitante están viendo este tema.

Antonio_1987

Hola con todos. Estoy empezando a crear una Intranet en PHP y MySQL, pero tengo una duda que no me deja seguir adelante: se trata de la creación de usuarios y los permisos que éstos tengan en la Web.

La PC servidor tendrá el CentOS como SO (Apache y MySQL, como les mencioné). Es una web pequeña (casi un piloto) así que usaré plantillas de bootstrap para el diseño.

El tema es al definir los usuarios y sus permisos. En principio sólo habrá dos niveles:

- Usuario (común)
- Administrador (todos los permisos).

Éstos se corresponden con un campo Nivel (bit) en la tabla Usuario.

Lo que no sé es cuál es la manera idónea para restringir el acceso de los usuarios a las páginas del sistema.

Pienso en el principio de obtener el Nivel del usuario al momento del login, y a partir de ahí redireccionarlo a otra página según su nivel, que muestre acceso sólo a lás páginas PHP que "le corresponde" usar... Cada archivo PHP debería verificar en la cabecera el nivel de quien se logueó, para que nadie con nivel "usuario" acceda a formularios de un "Admin" por ejemplo.

Quería preguntarles qué esquema o principio me conviene seguir, porque ése que tengo en mente no me convence para nada...

— ¿Podría trabajar lo de los usuarios a nivel de administración de base de datos? O sea que según el login, el user utilice la BD como root o como algún otro usuario creado a este efecto... Ya los privilegios los trabajaría en MySQL con permisos sobre cada tabla.

— ¿Y trabajándolo a nivel de tablas? He visto por ahí que crean los permisos en tablas de la BD, y en éstas guardan los nombres de las páginas que cada usuario podrá ver según su nivel.

Espero que me puedan indicar una forma general de trabajo, la más acostumbrada o ideal en estos casos. El hecho es que posteriormente trabajaré una Intranet mucho más grande, con decenas de usuarios y tablas con millones de registros, así que me gustaría saber por su experiencia cuál es la solución más idónea para éste y futuros problemas.

Muchas gracias a todos.



engel lex

acuerdate qu los usuarios a nivel d mysql no es lo mismo que php, mysql restringe permisos en el uso de la tabla y te crearía una serie de conflictos innecesarios

lo que haces es que al logearse, se leen los datos de la tabla y en la variable de sesion metes un valor "admin" que sea true/false, cada pagina de administrador debe tener el seguro "if...$_....['admin']!=true){prohibido();"

lo que puedes hacer es una sola pagina de admin, que sea puros require_once de otras paginas y controlas todo el flujo en un solo portal
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Antonio_1987

Hola, engel lex, gracias por responder. Pues sí, por el tema de los conflictos posteriores es que no me gustaba mucho la solución de otorgar permisos a nivel de BD. Aunque lo tenía en cuenta por el tema de una mayor seguridad (y por saber si es lo que se usa en sistemas verdaderamente grandes). Lo que sí, supongo que no será recomendado conectarse mediante el usuario root, ¿no? Supongo que tendré que crear un usuario que pueda manipular los datos pero no alterar la estructura de la BD. Todos ingresarían bajo ese ese usuario MySQL... Me indicas si supongo mal.

Entonces me recomiendas manejar los accesos en la propia programación PHP. El temita es que recién me estoy iniciando en el diseño Web (como te mencioné, pensaba usar plantillas ya hechas), ¿tendrás talvez algún manual o link con ejemplos?, sobre todo la parte de hacer una Web con una sóla página, a la que se le cambie el contenido según el usuario o la información requerida, en vez de hacer varias páginas PHP diferentes (que es lo que había empezado a hacer, repitiendo código en las cabeceras y demás  :-\ ). Muchas gracias por tu ayuda.

engel lex

CitarHola, engel lex, gracias por responder. Pues sí, por el tema de los conflictos posteriores es que no me gustaba mucho la solución de otorgar permisos a nivel de BD. Aunque lo tenía en cuenta por el tema de una mayor seguridad (y por saber si es lo que se usa en sistemas verdaderamente grandes). Lo que sí, supongo que no será recomendado conectarse mediante el usuario root, ¿no? Supongo que tendré que crear un usuario que pueda manipular los datos pero no alterar la estructura de la BD. Todos ingresarían bajo ese ese usuario MySQL... Me indicas si supongo mal.

no supones mal... creas un usuario, con permisos limitados (solo las operaciones que usarás que normalmente se limitan a select, delete y update) y acceso solo a esa base de datos...

Citar
Entonces me recomiendas manejar los accesos en la propia programación PHP. El temita es que recién me estoy iniciando en el diseño Web (como te mencioné, pensaba usar plantillas ya hechas), ¿tendrás talvez algún manual o link con ejemplos?, sobre todo la parte de hacer una Web con una sóla página, a la que se le cambie el contenido según el usuario o la información requerida, en vez de hacer varias páginas PHP diferentes (que es lo que había empezado a hacer, repitiendo código en las cabeceras y demás  :-\ ). Muchas gracias por tu ayuda.

no, yo aprendí a base de experimentación...

en general no es complicado...

experimenta con require, con variables _GET (investiga sobre url amistosos) y con esas 2 cosas combinadas puedes obtener lo que necesitas

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Antonio_1987

Bien, engel lex, me ha servido de mucho tu ayuda, ya tengo una idea de cómo estructurar la Intranet con include o require (parece que me hablabas del esquema "modular", ¿no?).

Estoy rearmando la Web, pero te debo mencionar que en este sistema van a entrar puras transacciones (insert, update; casi no va a ser informativo), así que tengo la inquietud de cómo trabajaré cuando llegue a los formularios.

Supongo que en adelante en los forms ya no deberé hacer llamadas del tipo:

action="Registrarcambios.php" 

Sino:

action="principal.php?pagina=Registracambios"

...realizando el registro en la misma página Principal por medio de include. ¿Pero haciéndolo así no tendré inconvenientes al pasar los datos por POST? ¿El archivo PHP que procese la info, recibe sin problemas los parámetros al ser llamado así?

Aún voy a probar, pero me cuentas, por favor, si de antemano también tendría que cambiar esa forma de trabajo; si es que para el caso de formularios (y no sólo páginas "planas") no conviene llamar los contenidos con include o require.

Gracias por tu ayuda, me viene siendo muy valiosa.

engel lex

la intención es que de pases por ejemplo "agregar un amigo"


pagina.php?accion=agregar&persona=antonio

la pagina (como el ya debió hacer login), sabrá a quien tiene que darle ese amigo

de manera que no pases directo un query a la db, para evita que alguien haga algo que no debería tener acceso a hacer
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.