Issue with classes in sets
Closed this issue · 0 comments
claygorman commented
Hello,
I love this library but I have ran into an issue I thought I could pick you brain on.
In the example https://pythonhosted.org/Flask-Principal/#granular-resource-protection i implemented almost identically to how it states there but I have an issue. When calling if permission.can():
I get False back from the following line... https://github.com/mattupstate/flask-principal/blob/master/flask_principal.py#L333-L334
In order to make this work I had to implement the following.
class EditBlogPostPermission(Permission):
def __init__(self, post_id):
need = EditBlogPostNeed(unicode(post_id))
super(EditBlogPostPermission, self).__init__(need)
self.need = need
def __eq__(self, other):
"""Override the default Equals behavior."""
if isinstance(other, self.need.__class__):
return self.need == other
return False
def __ne__(self, other):
"""Override the default Unequal behavior."""
return self.need != other
def __hash__(self):
"""Override the default Hash behavior."""
return hash(self.need)
Do you have any suggestions on how to better implement this? I dont see any tests in your test file for this use case.
I also considered the following instead of the __eq__, __ne__, __hash__
def allows(self, identity):
for prov in identity.provides:
if isinstance(self, type(prov)) and self.needs == prov.needs:
return True
return False