djangodjango-middlewaredjango-voting

How to restrict users voting on their own model


I am using django-voting as a voting application for two of my models. Those both models have fields "author".

How can I restrict a user from voting on a model that has this particular user set as it's author without modifying django-voting app?

Django middleware is the first thing that comes to my mind, but I don't understand it's "proces_view" function. If you think middleware is the right way could you please give an example of how to do it.


Solution

  • Add this code anywhere in your settings.py:

    from voting.managers import VoteManager
    
    def check_user(func):
        def wrapper(self, obj, user, vote):
            if obj.user != user:
                return func(self, obj, user, vote)
            else:
                return None
                # or raise some exception
        return wrapper
    
    VoteManager.record_vote = check_user(VoteManager.record_vote)
    

    I didn't run this code, maybe it's incorrect, but I hope idea is clear