Jump to content

[SOLUCIONADO] Acceso sólo a determinados módulos (backoffice)


carla089

Recommended Posts

Hola
 
Intento configurar los permisos para dar acceso en el back office sólo a determinados módulos a un perfil de usuario.
Por ejemplo, dar acceso únicamente al footer, el menu horizontal y el slider a un usuario de la Tienda que no debería poder tocar en otros modulos (como configuraciones de los métodos de pago), pero que si debe poder actualizar aspectos básicos de la apariencia.
 
Me he planteado 3 posibles soluciones
 
Administración - Permisos y enlaces en Acceso Rápido
 
Supongo que ésta sería la forma de hacerlo, si consiguiera que funcionara. La idea es poner enlaces en Acceso Rápido a esos 4 modulos (sin los token).
Y en Permisos denegar el acceso al Perfil X a Módulos (o permitirle Editar pero no Ver), pero en la tabla derecha (Módulos Ver/Configurar) permitir configurar esos 4 modulos.
El resultado es que los enlaces funcionan pero da "Acceso denegado". ¿Está mal planteado?¿Estoy haciendo algo mal?¿O es que esa columna de Modulos en Permisos es para otra cosa?
 
Crear una Tab en BackOffice que muestre esos módulos
 
Sin embargo, si al final sería una pestaña que derivaría del controlador de modulos, y si en Permisos deniego el acceso creo ke me encontraría con el mismo problema: dejar entrar en el enlace para mostrar un "Acceso denegado"
 
Ocultar pestaña de modulos
 
Ésta es la posibilidad en la que deposito más esperanzas. Podría poner los enlaces en el Acceso Rápido y en Permisos permitir ver y editar los modulos para ese perfil, pero luego ocultar la pestaña a la vista. Es algo chapucero, pero menos es nada.
¿Hay alguna forma de ocultar (sin desactivar o denegar el acceso) una tab para un perfil? Incluso si no se puede me serviría ocultarlas para todos.
 
 
Ojalá encontremos alguna solución para esto
 
Gracias por anticipado^^

Edited by carla089 (see edit history)
Link to comment
Share on other sites

Bueno, he encontrado una solución (algo chapucera pero funciona), ocultando la pestaña de modulos. Al final me contesto a mí misma

 

RESULTADO

 

Sólo el SuperAdmin y el Administrador pueden ver la pestaña de modulos, y el PerfilX puede configurar determinados módulos, sin ver más opciones ni más módulos.

Hace poco que empecé con prestashop, php y smarty y seguro que hay una forma mejor de hacerlo. Como decía ésta es algo chapucera porque PerfilX sí tendría más acceso del que quisiéramos, lo que ocurre es que no tiene a la vista los enlaces, tendría que introducir la url a mano. Para mí me sirve (ese perfil está orientado a usuarios básicos) pero no deja de ser un fallo de seguridad enorme.

 

PASOS

 

Administración - Permisos

PerfilX - Permitirle Ver y editar Módulos. En columna derecha permitir ver todos y configurar aquellos que queramos.

post-728603-0-48116500-1386847132_thumb.jpgpost-728603-0-48190400-1386847140_thumb.jpg

 

Acceso Rápido

Poner los enlaces a configuración de esos módulos, solo controller y configure, sin token.

Por ejemplo, para administrar los comentarios del producto:

miDominio/adminDir/index.php?controller=AdminModules&configure=productcomments

 

 

Modificar archivos

 

adminDir\themes\default\template\header.tpl

 

Código

 

 

 

Ocultar Modules Tab

En torno a la línea 200 encontramos esto:

{foreach $tabs AS $t}
{if $t.active}
					<li class="submenu_size maintab {if $t.current}active{/if}" id="maintab{$t.id_tab}">
						<a href="#" class="title">
							<img src="{$t.img}" alt="" />{if $t.name eq ''}{$t.class_name}{else}{$t.name}{/if}
						</a>
						<ul class="submenu">
							{foreach from=$t.sub_tabs item=t2}
								{if $t2.active}
									<li{if $t2.current} class="active"{/if}><a href="{$t2.href|escape:'htmlall':'UTF-8'}">{if $t2.name eq ''}{$t2.class_name}{else}{$t2.name|escape:'htmlall':'UTF-8'}{/if}</a></li>
								{/if}
							{/foreach}
						</ul>
					</li>
{/if}
{/foreach}

y lo sustituímos por esto:

{foreach $tabs AS $t}
{if $t.active}
	{if $t.id_tab == 15 && $employee->id_profile != 1 & $employee->id_profile != 2}
		<!-- Hidden Modules Tab-->
	{else}
					<li class="submenu_size maintab {if $t.current}active{/if}" id="maintab{$t.id_tab}">
						<a href="#" class="title">
							<img src="{$t.img}" alt="" />{if $t.name eq ''}{$t.class_name}{else}{$t.name}{/if}
						</a>
						<ul class="submenu">
							{foreach from=$t.sub_tabs item=t2}
								{if $t2.active}
									<li{if $t2.current} class="active"{/if}><a href="{$t2.href|escape:'htmlall':'UTF-8'}">{if $t2.name eq ''}{$t2.class_name}{else}{$t2.name|escape:'htmlall':'UTF-8'}{/if}</a></li>
								{/if}
							{/foreach}
						</ul>
					</li>
	{/if}
{/if}

Ocultar opción de buscar en modulos

original

						<option value="5" {if {$search_type} == 5} selected="selected" {/if}>{l s='carts'}</option>
						<option value="7" {if {$search_type} == 7} selected="selected" {/if}>{l s='modules'}</option>
					</select>

modificado

						<option value="5" {if {$search_type} == 5} selected="selected" {/if}>{l s='carts'}</option>
						{if $employee->id_profile== 1[spam-filter]
							<option value="7" {if {$search_type} == 7} selected="selected" {/if}>{l s='modules'}</option>
						{/if}

 

 

 

controllers\admin\AdminModulesController.php

Para que no le aparezcan los links a "Atrás" y "Configurar los hooks" en la configuración del módulo

 

Código

 

 

 

original

							$toolbar = '<table class="table" cellpadding="0" cellspacing="0" style="margin:auto;text-align:center"><tr>
									<th>'.$this->l('Module').' <span style="color: green;">'.$module->name.'</span></th>
									<th><a href="'.$backlink.'" style="padding:5px 10px">'.$this->l('Back').'</a></th>
									<th><a href="'.$hooklink.'" style="padding:5px 10px">'.$this->l('Manage hooks').'</a></th>
									<th style="padding:5px 10px">'.$this->l('Manage translations').' ';
									foreach (Language::getLanguages(false) as $language)
										$toolbar .= '<a href="'.$tradlink.$language['iso_code'].'#'.$module->name.'" style="margin-left:5px"><img src="'._THEME_LANG_DIR_.$language['id_lang'].'.jpg" alt="'.$language['iso_code'].'" title="'.$language['iso_code'].'" /></a>';
							$toolbar .= '</th></tr>';

modificado

							$toolbar = '<table class="table" cellpadding="0" cellspacing="0" style="margin:auto;text-align:center"><tr>
									<th>'.$this->l('Module').' <span style="color: green;">'.$module->name.'</span></th>';
									if ($this->context->employee->id_profile == 1 || $this->context->employee->id_profile == 2)
									{
										$toolbar .= '<th><a href="'.$backlink.'" style="padding:5px 10px">'.$this->l('Back').'</a></th>
										<th><a href="'.$hooklink.'" style="padding:5px 10px">'.$this->l('Manage hooks').'</a></th>';
									}	
									$toolbar .= '<th style="padding:5px 10px">'.$this->l('Manage translations').' ';
									foreach (Language::getLanguages(false) as $language)
										$toolbar .= '<a href="'.$tradlink.$language['iso_code'].'#'.$module->name.'" style="margin-left:5px"><img src="'._THEME_LANG_DIR_.$language['id_lang'].'.jpg" alt="'.$language['iso_code'].'" title="'.$language['iso_code'].'" /></a>';
							$toolbar .= '</th></tr>';

 

 

 

Dejo los archivos en el zip

Mi versión de Prestahop: 1.5.6.1

 

post-728603-0-85741500-1386854602_thumb.jpg

psOcultarModulos_20131212.zip

Edited by carla089 (see edit history)
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...