向Django添加客户端可定义的权限

django-permafrost的Python项目详细描述


Permafrost DevelopPermafrost CIDocumentation Status

Django永久冻土

Django永久冻土是Django权限框架的扩展。它的目标是允许开发人员向站点上的客户端用户公开一些权限,以便他们可以创建和管理自定义用户角色。在

它补充道:

  • 一个视图Mixin,支持基于不同HTTP方法类型(GET、POST、PUT等)的用户权限,以实现额外的粒度控制。在
  • 一个视图Mixin,它将所有失败的权限检查捕获到Django的日志记录设置中。在
  • 支持客户端用户可定义角色和权限的应用程序。它使用底层的Django权限系统并控制哪些权限对用户公开。
    • 开发人员既可以要求权限类的权限,也可以有客户端设置的可选权限。在

例如,您有一个SAAS平台,其中有管理员客户端。他们管理系统中主帐户上的其他用户(如员工等),并希望能够为不同的用户定义不同的权限。他们可能有一个员工,他们希望能够管理电子邮件列表,但不允许他们邀请用户,但这两个都被视为员工类别。在

安装

要安装,只需使用pip

> pip install django-permafrost

若要将其添加到项目中,请将其添加到您settings.py中的安装应用程序列表

^{pr2}$

…然后迁移

> ./manage.py migrate

设置

Django Permafrost的目标是允许客户机在开发人员定义的类别下,使用开发人员定义的必需和可选权限创建自己的永久冻土角色。在

开发人员定义的类别示例如下:

SampleCategoryPermissionFormat:PERMAFROST_CATEGORIES={'user':{'label':_("User"),'access_level':1,'optional':[{'label':_('Can Add Users to Role'),'permission':('add_user_to_role','permafrost','permafrostrole')},],'required':[{'label':_('Can add Role'),'permission':('add_permafrostrole','permafrost','permafrostrole')},],},}

这将被添加到Djangosettings.py文件中(或者至少包括在中)。在

在上面,我们定义了用户类别,给它一个可本地化的标签“User”,并以“自然密钥”格式提供了两个权限(因为PKs使用权限可能不可靠),第一个是可选的,第二个是必需的。在

还有一个访问级别设置,有助于更轻松地对访问级别进行排序。在

eh3建议>

建议您更新代码以使用permanfrotrole的内置函数添加用户和权限。它们增加了额外的检查级别,以确保永久冻土类别配置允许传入的权限。在

例如,对组的权限:

group.permissions.set([permission_list])group.permissions.add(permission,permission,...)group.permissions.remove(permission,permission,...)group.permissions.clear()

可替换为:

PermafrostRole.permissions_set([permission_list])PermafrostRole.permissions_add(permission,permission,...)PermafrostRole.permissions_remove(permission,permission,...)PermafrostRole.permissions_clear()

便利工具

有一个工具可以帮助开发人员以永久冻土期望的格式列出可用的权限。在

> ./manage permlist

使用该命令将生成如下列表

> ./manage.py permlist

Permlist formatted for your PermafrostRoles configuration
{'label':_('Can add email address'), 'permission': ('add_emailaddress', 'account', 'emailaddress')},
{'label':_('Can change email address'), 'permission': ('change_emailaddress', 'account', 'emailaddress')},
{'label':_('Can delete email address'), 'permission': ('delete_emailaddress', 'account', 'emailaddress')},
...

可将永久冻土层中的每一个类别都复制到配置行中。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener