Showing and hiding menu items in django based on a non-permissions criteria?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I have a field on a Company called leave_approvers which is a ManyToManyField to Users.



The leave_approvers can approve leave of other users in the company they are a leave approver for. They also receive an email when leave is requested.



I would now like to show or hide the Approve Leave tab in the main layout based on whether the user is a leave_approver.




  1. Is the decision to have a leave_approver field flawed as I should be using the built in authorisation or something like django-guardian. Note that I am sending an email to the leave_approvers and that would mean


  2. Can I just make a query in the base.html to check if a user is a leave_approver. How can this be done and surely there is a performance hit?











share|improve this question























  • Hi! How did you solve your problem? I'm facing similar, to display menu items set based on groups user in.

    – Михаил Павлов
    Nov 23 '18 at 5:53











  • @МихаилПавлов Just answered the question, I hope it gives you an idea

    – surfer190
    Nov 23 '18 at 13:31


















0















I have a field on a Company called leave_approvers which is a ManyToManyField to Users.



The leave_approvers can approve leave of other users in the company they are a leave approver for. They also receive an email when leave is requested.



I would now like to show or hide the Approve Leave tab in the main layout based on whether the user is a leave_approver.




  1. Is the decision to have a leave_approver field flawed as I should be using the built in authorisation or something like django-guardian. Note that I am sending an email to the leave_approvers and that would mean


  2. Can I just make a query in the base.html to check if a user is a leave_approver. How can this be done and surely there is a performance hit?











share|improve this question























  • Hi! How did you solve your problem? I'm facing similar, to display menu items set based on groups user in.

    – Михаил Павлов
    Nov 23 '18 at 5:53











  • @МихаилПавлов Just answered the question, I hope it gives you an idea

    – surfer190
    Nov 23 '18 at 13:31














0












0








0








I have a field on a Company called leave_approvers which is a ManyToManyField to Users.



The leave_approvers can approve leave of other users in the company they are a leave approver for. They also receive an email when leave is requested.



I would now like to show or hide the Approve Leave tab in the main layout based on whether the user is a leave_approver.




  1. Is the decision to have a leave_approver field flawed as I should be using the built in authorisation or something like django-guardian. Note that I am sending an email to the leave_approvers and that would mean


  2. Can I just make a query in the base.html to check if a user is a leave_approver. How can this be done and surely there is a performance hit?











share|improve this question














I have a field on a Company called leave_approvers which is a ManyToManyField to Users.



The leave_approvers can approve leave of other users in the company they are a leave approver for. They also receive an email when leave is requested.



I would now like to show or hide the Approve Leave tab in the main layout based on whether the user is a leave_approver.




  1. Is the decision to have a leave_approver field flawed as I should be using the built in authorisation or something like django-guardian. Note that I am sending an email to the leave_approvers and that would mean


  2. Can I just make a query in the base.html to check if a user is a leave_approver. How can this be done and surely there is a performance hit?








python django






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 15 '18 at 7:38









surfer190surfer190

3,928854105




3,928854105













  • Hi! How did you solve your problem? I'm facing similar, to display menu items set based on groups user in.

    – Михаил Павлов
    Nov 23 '18 at 5:53











  • @МихаилПавлов Just answered the question, I hope it gives you an idea

    – surfer190
    Nov 23 '18 at 13:31



















  • Hi! How did you solve your problem? I'm facing similar, to display menu items set based on groups user in.

    – Михаил Павлов
    Nov 23 '18 at 5:53











  • @МихаилПавлов Just answered the question, I hope it gives you an idea

    – surfer190
    Nov 23 '18 at 13:31

















Hi! How did you solve your problem? I'm facing similar, to display menu items set based on groups user in.

– Михаил Павлов
Nov 23 '18 at 5:53





Hi! How did you solve your problem? I'm facing similar, to display menu items set based on groups user in.

– Михаил Павлов
Nov 23 '18 at 5:53













@МихаилПавлов Just answered the question, I hope it gives you an idea

– surfer190
Nov 23 '18 at 13:31





@МихаилПавлов Just answered the question, I hope it gives you an idea

– surfer190
Nov 23 '18 at 13:31












1 Answer
1






active

oldest

votes


















0














After consideration making use of django permissions (which are added to the context via a context processor automatically) is the best route in my opinion.
Using something like this in the template:



{% if perms.foo.can_vote %}


However, in my case I cut corners and make a query for all the leave approvers in the base template which is much slower than the prebuilt perms in the context.



{% if user in user.company.leave_approvers.all %}
<li role="separator" class="divider"></li>
<li><a href="{% url 'leave:pending' %}">Pending Leave Approval</a></li>
{% endif %}





share|improve this answer


























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f48258687%2fshowing-and-hiding-menu-items-in-django-based-on-a-non-permissions-criteria%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    After consideration making use of django permissions (which are added to the context via a context processor automatically) is the best route in my opinion.
    Using something like this in the template:



    {% if perms.foo.can_vote %}


    However, in my case I cut corners and make a query for all the leave approvers in the base template which is much slower than the prebuilt perms in the context.



    {% if user in user.company.leave_approvers.all %}
    <li role="separator" class="divider"></li>
    <li><a href="{% url 'leave:pending' %}">Pending Leave Approval</a></li>
    {% endif %}





    share|improve this answer






























      0














      After consideration making use of django permissions (which are added to the context via a context processor automatically) is the best route in my opinion.
      Using something like this in the template:



      {% if perms.foo.can_vote %}


      However, in my case I cut corners and make a query for all the leave approvers in the base template which is much slower than the prebuilt perms in the context.



      {% if user in user.company.leave_approvers.all %}
      <li role="separator" class="divider"></li>
      <li><a href="{% url 'leave:pending' %}">Pending Leave Approval</a></li>
      {% endif %}





      share|improve this answer




























        0












        0








        0







        After consideration making use of django permissions (which are added to the context via a context processor automatically) is the best route in my opinion.
        Using something like this in the template:



        {% if perms.foo.can_vote %}


        However, in my case I cut corners and make a query for all the leave approvers in the base template which is much slower than the prebuilt perms in the context.



        {% if user in user.company.leave_approvers.all %}
        <li role="separator" class="divider"></li>
        <li><a href="{% url 'leave:pending' %}">Pending Leave Approval</a></li>
        {% endif %}





        share|improve this answer















        After consideration making use of django permissions (which are added to the context via a context processor automatically) is the best route in my opinion.
        Using something like this in the template:



        {% if perms.foo.can_vote %}


        However, in my case I cut corners and make a query for all the leave approvers in the base template which is much slower than the prebuilt perms in the context.



        {% if user in user.company.leave_approvers.all %}
        <li role="separator" class="divider"></li>
        <li><a href="{% url 'leave:pending' %}">Pending Leave Approval</a></li>
        {% endif %}






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jan 19 at 14:54

























        answered Nov 23 '18 at 13:31









        surfer190surfer190

        3,928854105




        3,928854105
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f48258687%2fshowing-and-hiding-menu-items-in-django-based-on-a-non-permissions-criteria%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

            Alcedinidae

            Origin of the phrase “under your belt”?