django的admin后台自带用户权限管理,能够为用户指定特定的视图权限。实际应用中还不够强大,比如有更新项目20个,共用的是同一个视图views函数,如果给不同用户分配不同项目更新权限,Django自带的admin管理后台就办不到了,它的粒度只到视图级别,这是就需要自己开发了。还有个问题就是web端展示,就像zabbix样,需要向不同的用户展示不同的功能,这个admin后台也是做不到的。下面就这两点简单阐述下我实现的方法,简单、粗暴,第一次写这种功能,不好还多多指教。
1、同一个视图,不同用户分配不同的项目更新权限。
这个比较简单,因为每个项目的URL是不一样的,只要创建一个用户与URL一一对应的关系即可,视图最开始判断下该用户是不是有这个权限就可以了,如果没有权限重定向到404页面等处理。
这个代码比较简单就不献丑了,后台为用户添加URL权限的页面是这样的:
2、不同用户页面展示不同的功能。
这个有点复杂,我首先定义了一个全局的URL拓扑(这样表达可能比较生动,嘿嘿),每个页面上的功能定义一个唯一的坐标,通过后台给用户添加对应的功能,这样就可以获取每个用户自己的URL拓扑,然后结合django的模板就可以为不同的用户展示不同的功能了。
录入URL信息,本来想自动读取urls的,发现比较麻烦,可能是我水平有限,还是来点简单的
定义全局的URL拓扑
1 | #casClass config |
然后根据定义的URL坐标和用户所属的URL生成用户自己的URL拓扑。
1 | #返回当前用户的url的拓扑结构 |
通过上面的函数就可以为每个用户生成特定的URL拓扑了,结合django的模板渲染功能就可以展现用户自己的模块。
举个例子,模板的部分代码如下:
1 | {% if cmap.0.0 %} |
截图几张展示下效果:
普通用户的页面:
超级用户的页面:
没有权限返回的页面:
这个用户权限分配写的比较粗糙,只是用了我认为比较简单的代码实现了能用的功能,不足之处多多还望大神们多多指教。