为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第三方库


热门话题
安卓如何在java字符串中获取RATE的值   java ANT在哪里输出编译器错误?   在java中,while循环在何处启动对象   javacom。谷歌。格森。内部的LinkedTreeMap无法强制转换到我的类   java单选按钮。isSelected()方法未返回正确的响应   嵌入式系统中applet中的java相对码基字段   如何在eclipse中将Java应用程序附加到jvm探查器?   java为什么Android应用程序崩溃?   在java中拖放上传后保持文件夹结构   爪哇多领导人选举问题   java Springs RestTemplate如何处理postForEntity()中的错误响应   Java如何用前导零递增整数字符串?   java Android将文本作为图像共享给其他应用程序   Java搜索替换   java isDirectory()不适用于UNIX目录   java我们可以得到显示测试类是否通过或失败的TestNG报告吗   Java类对象排序和分组   简单Java幂递归   java在处理MethodArgumentNotValidException时如何访问请求对象?