为django的每个视图提供另一个访问控制列表(acl)

yaacl的Python项目详细描述


yaacl
==


为django每个视图提供另一个访问控制列表(acl)


在身份验证和管理应用程序
*将“import yaacl”放在当前设置文件的末尾
*运行`./manage.py syncdb``或`./manage.py migrate``



然后在
`settings.acl_group_user_model``(即:``cms_user.group``)



修饰完所有视图后,
运行命令`./manage.py sync_acl``,所有视图都将注册在
数据库中。

``python
从yaacl导入acl register_view
从django.contrib.auth.decorators导入login_required

@acl_register_view('short description about this view',“resource_name”)
def index(request):
pass
````

first parameter is``name``此视图(资源)的简称。第二个
参数是“resource”,不是必需的。如果“name=none`,
`` resource``未提供,则通过将
模块名和函数/类名


连接生成资源的名称,这取决于您如何命名这些资源,但我建议(并在我制作此应用程序的
项目中使用)将它们命名为“`<;app戋label>;<;view戋name>;`”,因此
稍后在模板中,您可以检查用户是否有权访问“`<;app戋label>;”“`

”中的所有资源,例如,您在新闻应用程序中有一个典型的crud视图,所以代码
应该是这样的:

`` python
从yaacl.decorators导入acl注册表视图
从django.contrib.auth.decorators导入登录所需




装饰基于标准函数的视图
@登录所需
@acl注册表视图('news list','news.create)
def index(request):


@acl_register_view('update news entry')
def update(request):


@login_required
@acl_register_view('delete news entry')
def delete(request):


新闻“
类创建(formview):




````

so,您的资源列表如下:


*``news.views.index``news list
*``news.create``create news
*``news.views.update``update news entry
*``news.views.delete``delete news entry

然后在
模板中,您可以使用如下代码检查它们:

``html
{%load acl%}



{%if request.user有权访问:'news.index%}
yes它有权访问news.index视图。
{%else%}
no,它没有。
{%endif%}


`````




``````html
{{%br/>{{%n如果有请求,用户有权访问:'news'%}
```html
```html
{%n如果有请求,用户有权访问:'news''%}
{%else%}
{%else%}
{%endif%}


`
``

`




;信号
实际上只有一个信号,`` yaacl.signals.register_resource``,在资源注册到``acl.acl_list``之前调用
。其目的是
转换“name”和/或“resource”。函数应该返回dict,其中包含
keys``name``和``resource`。

其中,我使用它从yaacl的resource name


``python
中删除“module”和“views”`
。从django的signals import register_resource
。dispatch import receiver

@receiver(register_resource)
def transform_resource(sender,resource,name,**Kwargs):
资源部件=资源。拆分('.')

源部件和资源部件[0]='模块':
资源部件.pop(0)

if len(资源部件)>;=2和资源部件[-2]='视图':
资源部件.pop(-2)


resource='..join(资源部件)

return{'resource':资源,“name”:name}
```

然后总是授予访问权限
*在“yaacl/no_access.html”文件中没有访问页模板
*在“has_access”模板标记中测试只是检查资源名称是否以
给定名称开头


todo
*`.travis.yml`
*一个标志,以指示工作人员具有完全访问权限的资源

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

推荐PyPI第三方库


热门话题
JavaSpringbean已创建但未自动连接   java LibGDX游戏在三星Galaxy Grand Prime上结束   如何在Java中列出字符串句子中所有匹配条件的单词   java在Recyclerview中使用“putExtra”传递数据   java从一个特定的数组中提取特定的JSON对象,以便在Android中通过一个意图放入另一个活动   java需要使用IntelliJ和设置项目SDK的帮助   java springcontextindexer和Swagger 3   java使用indexOf和substring计算数字   java使用xml解析在word文档中查找隐式分页符   在添加<context:componentscan basepackage=“com.young.user”/   java无条件更改JTable单元格的背景色   选择列表中的java调用oracle函数:节点无数据类型   java如何添加缓冲图像作为JFrame的背景,然后在此图像上添加面板?   java Javadoc找不到用scala编写的类   java连接到文件共享程序的IP地址   java将数组元素加载到集合中   Tomcat中的java servlet、过滤器和线程   非Bean对象中的java EJB CDI注入?   java与println和printf的不同舍入