我正在使用来自Django的规则库,并且我没有克服为特定菜单定义规则的问题。
规则库在此处可用:rules library
我在Web应用程序中以admin
的身份登录。
我有一个 menus.py 文件,如下所示:
class AdminMenuItem(MenuItem):
def check(self, request):
return self.allow(request.user)
@staticmethod
def allow(user):
return user.has_perm('app.access_admin_menu')
Menu.add_item('admin', MenuItem('Admin', '#admin', children=settings_children,
check=lambda request: AdminMenuItem.allow(request.user)))
settings_children = (
...
AdminMenuItem("Manage Animals", reverse("animal-list-crud"), weight=10),
AdminMenuItem("Statistics", reverse("statistics"), weight=140)
)
然后我在 rules.py 文件中定义:
from rules.permissions import add_perm
from rules.predicates import predicate
@predicate
def is_admin(user):
if user.is_anonymous:
return False
return True if user.profile.type == 'ED' and user.profile.role == 'AD' else False
# Rules for admin_menu.
add_perm('app.access_admin_menu', is_admin)
# Rules for animal.
add_perm('app.view_animal', is_admin)
add_perm('app.add_animal', is_admin)
add_perm('app.change_animal', is_admin)
add_perm('app.delete_animal', is_admin)
对于动物菜单(这是CRUD的一部分),它工作正常。但是,当我尝试访问统计信息部分(不是CRUD)时,出现错误403 Access forbidden
。
我忘记了代码中的某些内容吗?
谢谢
答案 0 :(得分:0)
我找到了解决方案。上面公开的代码不错,但是我的 main.py 代码中缺少了一些内容。
<div id="table">
<div>
<div>
this is something long on the first row
</div>
<div>
short 1st row
</div>
</div>
<div>
<div>
wazaa 2nd row
</div>
<div>
wazii 2nd row
</div>
</div>
</div>
在我的课堂上,我忘记了class StatisticsView(PermissionRequiredMixin, View):
""" Render the statistics page with a form to generate various stats """
permission_required = 'app.access_statistics'
...
属性PermissionRequiredMixin
。
通过添加这两个元素,它现在可以工作了!