none
Crear menu dinamico con de Acuerdo A el Rol ASP .net mvc 5 RRS feed

  • Pregunta

  • hola buen dia

    cree un menu sencillo pero necesito que cierta parte del menu no se visualice a usuarios que no son administradores el menu lo tengo en la pagina layout 

                    <ul class="nav navbar-nav">
                        <li>@Html.ActionLink("Generar Certificado", "Index", "GenerarCertificado/GenerarCertificado")</li>
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="true">Mantenimiento <span class="caret"></span></a>
                            <ul class="dropdown-menu" role="menu">
                                <li>@Html.ActionLink("Ciudades", "Index", "Ciudades")</li>
                                <li>@Html.ActionLink("Tipo Impuestos", "Index", "Certificados")</li>
                                <li>@Html.ActionLink("Periodicidad", "Index", "Periodicidads")</li>
                            </ul>
                        </li>

    deseo que el dropdown no sea visible o que no tenga acceso a los demas usuarios, en algunos foros indican que use el controller y con un if si es usuario admin pero como utilizo el controller en el layout de la aplicacion mvc??

    codigo de muestra porfa para las respuestas!!!!

    lunes, 21 de noviembre de 2016 15:18

Respuestas

  • greg_dorian,

    ¿Utilizas SimpleMemberShip o Identity para la autenticación y autorización de accesos de usuario?

    De ser así podrías utilizar el método IsInRol():

    @if (User.IsInRole("ADMINISTRADOR"))
    {
    	<li class="dropdown">
    		<a href="#" class="dropdown-toggle" ...
    		<ul class="dropdown-menu" role="menu">
    			<li>@Html.ActionLink("Ciudades", "Index", "Ciudades")</li>
    			<li>@Html.ActionLink("Tipo Impuestos", "Index", "Certificados")</li>
    			<li>@Html.ActionLink("Periodicidad", "Index", "Periodicidads")</li>
    		</ul>
    	</li>
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta greg_dorian miércoles, 23 de noviembre de 2016 15:56
    lunes, 21 de noviembre de 2016 17:00

Todas las respuestas

  • greg_dorian,

    ¿Utilizas SimpleMemberShip o Identity para la autenticación y autorización de accesos de usuario?

    De ser así podrías utilizar el método IsInRol():

    @if (User.IsInRole("ADMINISTRADOR"))
    {
    	<li class="dropdown">
    		<a href="#" class="dropdown-toggle" ...
    		<ul class="dropdown-menu" role="menu">
    			<li>@Html.ActionLink("Ciudades", "Index", "Ciudades")</li>
    			<li>@Html.ActionLink("Tipo Impuestos", "Index", "Certificados")</li>
    			<li>@Html.ActionLink("Periodicidad", "Index", "Periodicidads")</li>
    		</ul>
    	</li>
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta greg_dorian miércoles, 23 de noviembre de 2016 15:56
    lunes, 21 de noviembre de 2016 17:00
  • Para mi el concepto dimanico significa que sólo habrá una plantilla base y a través de código se agregarán las demás opciones.

    Lo que yo hice en un projecto fue eso, se tenianos que agregar x cantidad de gráficos en diferentes tabPage así que lo hice por código.

    Igual que en winform deberás poner id a cada opción y verificar que el usuario tenga acceso a esa opción y agregarlo por código dentro del dropdown.

    Estoy desde el cell, pero si necesitas código sería uno básico

    Salu2


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor


    martes, 22 de noviembre de 2016 0:20
  • código de ejemplo:

    archivo _layout.cshtml

    <li class="dropdown" id="menuDropDown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="true">Mantenimiento <span class="caret"></span></a>
        <ul class="dropdown-menu" role="menu">
            <li>@Html.ActionLink("Ciudades", "Index", "Home")</li>
            <li>@Html.ActionLink("Tipo Impuesto","Index","Home")</li>
            <li>@Html.ActionLink("Periocidad", "Index", "Home")</li>
        </ul>
     </li>
    

    se agrego id="menuDropDown" al element "dropdown"

    y luego en mi caso, lo puse en el Index de HomeController

    $(document).ready(function (e) {
        var $menuDropDown = $('#menuDropDown');
        $menuDropDown.hide();
    })
    

    en tu caso, tendrás que validar antes de ocultarlo ya sea guardando el tipo de usuario en localStorage u otro método.

    espero te ayude.


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    martes, 22 de noviembre de 2016 4:52
  • greg_dorian,

    ¿Utilizas SimpleMemberShip o Identity para la autenticación y autorización de accesos de usuario?

    De ser así podrías utilizar el método IsInRol():

    @if (User.IsInRole("ADMINISTRADOR"))
    {
    	<li class="dropdown">
    		<a href="#" class="dropdown-toggle" ...
    		<ul class="dropdown-menu" role="menu">
    			<li>@Html.ActionLink("Ciudades", "Index", "Ciudades")</li>
    			<li>@Html.ActionLink("Tipo Impuestos", "Index", "Certificados")</li>
    			<li>@Html.ActionLink("Periodicidad", "Index", "Periodicidads")</li>
    		</ul>
    	</li>
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    hola william estoy utilizando identity este codigo que publicaste lo puedo colocar perfectamente en _layout (la vista)???

    miércoles, 23 de noviembre de 2016 14:48
  • código de ejemplo:

    archivo _layout.cshtml

    <li class="dropdown" id="menuDropDown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="true">Mantenimiento <span class="caret"></span></a>
        <ul class="dropdown-menu" role="menu">
            <li>@Html.ActionLink("Ciudades", "Index", "Home")</li>
            <li>@Html.ActionLink("Tipo Impuesto","Index","Home")</li>
            <li>@Html.ActionLink("Periocidad", "Index", "Home")</li>
        </ul>
     </li>

    se agrego id="menuDropDown" al element "dropdown"

    y luego en mi caso, lo puse en el Index de HomeController

    $(document).ready(function (e) {
        var $menuDropDown = $('#menuDropDown');
        $menuDropDown.hide();
    })

    en tu caso, tendrás que validar antes de ocultarlo ya sea guardando el tipo de usuario en localStorage u otro método.

    espero te ayude.


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    hola marvin utilizo identity quiero seguir con la utilidad del identity 2.x como relaciono que menu le asigno segun el rol, asi como lo que indico  william??
    miércoles, 23 de noviembre de 2016 14:51
  • greg_dorian,

    ¿Por qué no?

    La vista _Layout contiene las partes comunes de una, varias o todas las vistas del proyecto para evitar repertir código por cada una de ellas. Una vista renderizada se compone también del código que define su plantilla (_Layout) por tanto es código que también le pertenece a la vista, no veo problema en que hagas lo sugerido si el comportamiento es general para todas las vistas que heredan de _Layout.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 23 de noviembre de 2016 15:50