'Rolle' - Objekt hat kein Attribut '__name__'

Bin ich versucht zu implementieren rollenbasierter Berechtigung in meiner Anwendung. Ich habe einen Dekorateur role_required, in die ich übergeben kann, der einen Satz der Benutzer-Rollen und nur die Benutzer mit dieser Rolle können den Zugriff, die Ansicht. Ich habe die korrekte Zuordnung der Rollen zum Benutzer, aber jetzt bin ich immer AttributeError, die besagt, dass 'Role' object has no attribute '__name__'

views.py Datei:

m_role_required = method_decorator(role_required)
class AddProposal(FormView):

    @m_role_required(roles.space_admin)
    def dispatch(self, *args, **kwargs):
        return super(AddProposal, self).dispatch(*args, **kwargs)

Den Dekorator role_required:

from django.contrib.auth.decorators import user_passes_test
def role_required(*roles):

    def check_role(user):
        return getattr(user, 'role', None) in roles
    return user_passes_test(check_role)

Den Role Klasse:

class Roles(object):
    _roles_dict = None

    @property
    def roles_dict(self):

        if self._roles_dict is None:
            self._roles_dict = {}
            for item in self._config:
                if isinstance(item, basestring):
                    # An item like 'manager'
                    self._roles_dict[item] = None
                else:
                    # Anything else
                    raise ImproperlyConfigured(_INCORRECT_ARGS)
        return self._roles_dict

    @property
    def choices(self):

        return [(role, role) for role in self.roles_dict.keys()]

    def __init__(self, config=None):

        self._config = config or getattr(settings, 'USER_ROLES', ())

    def __getattr__(self, name):

        if name in self.roles_dict.keys():
            return Role(name=name)
        else:
            raise AttributeError("No such role exists '%s'" % name)

roles = Roles()

Ich bin nicht in der Lage, um herauszufinden, warum dieser Fehler wird ausgelöst werden. Kann mir jemand helfen. Lassen Sie mich hinzufügen, wird die traceback-mit diesem

Umgebung:

Request Method: GET
Request URL: http://127.0.0.1:8000/en-gb/spaces/bithin/proposal/add/


Traceback:

  48. class AddProposal(FormView):
File "/home/bithin/gsoc/week3/e-cidadania/src/apps/ecidadania/proposals/views.py" in AddProposal
  78.     @m_role_required(roles.space_admin)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _dec
  34.         update_wrapper(_wrapper, func)
File "/usr/lib/python2.7/functools.py" in update_wrapper
  33.         setattr(wrapper, attr, getattr(wrapped, attr))

Exception Type: AttributeError at /en-gb/spaces/bithin/proposal/add/
Exception Value: 'Role' object has no attribute '__name__'
  • Poste bitte die vollständigen traceback, einschließlich der Zeilennummern. Sie können nicht Debuggen das problem, bis Sie genau wissen, was code ist, was es ist. Eine exception wird nicht ausgelöst durch "a-Klasse", es wird ausgelöst durch eine einzelne Linie des Codes.
  • Und wo ist Role Klasse? Vielleicht ist es nur ein Tippfehler?
  • Rolle Klasse in userrole von apps.thirdparty.userroles Rollen importieren
  • Das problem scheint in der role_required Dekorateur, dessen code Sie nicht veröffentlichen. Bitte versuchen Sie, zur Senkung der mit deinem post enthalten den code, der relevant ist, um die Fehler und nicht ein Haufen von fremden code.
InformationsquelleAutor Bithin | 2012-06-22
Schreibe einen Kommentar