先简单的说一下RBAC的概念:
主要有user, role 和 permission 这么三个元素,用户可以有多个角色,角色可以有多个 permission,这里的permission可以理解成对resource+operation。在这个基础上还可以增加group的概念,相信不难理解。
假设系统对于权限的要求是:能控制系统动态菜单的访问,控制其它的提交操作。
以下的想法是基于struts 1.2 + java 1.4 (部门最近一直比较保守,晕死)
个人觉得要实现这个模型的难点在于permission, 也就是其中的resource,应用中的资源应该包括动态资源和静态资源两类:
- 动态资源:比如说用户上传的文档,不同的文档可能会给不同的角色分配不同的权限。
- 静态资源:某些地方系统只要求控制固定的表单哪些角色可以查看,哪些角色可以更新。
个人认为动态资源相对比较容易处理,因为我们把这个动态资源的ID作为resource的ID,然后再加入一个resource type的属性就可以处理多种资源了。为什么说动态资源比较容易处理呢,因为我们处理这些动态资源的时候都是以ID来操作的,查询的时候也可以用ID进行过滤,唯一需要注意的可能会是性能问题,可以考虑使用缓存。
静态资源就有点麻烦了,说白了,其实控制静态资源就是控制角色是否可以访问系统中的某个方法。那么这时候我们怎么在permission里标识这个操作呢?有人会说,用URL,偶承认,这个绝对可以控制,但是这么做的话也就意味着权限是无法交给真正的用户来维护,除非你愿意维护一个URL与用户能看懂文字的对应列表,有点麻烦,也很难检查有没有遗漏的。
我想的办法是在自己的BaseFom(一般用struts的多少都会有这个东东)中加入一些代码:
public BaseForm extends .... {
...
public static final String CREATE = "create";
public static final String REVIEW = "view";
public static final String UPDATE = "update";
public static final String DELETE = "delete";
private List operations = new ArrayList();
//用于获取对用户友好的表单名称
public String getFormName() {
return "";
}
public List getOperations() {
//map中的value也是考虑用户友好
operations.add(new HashMap().put(CREATE, "Add new record"));
operations.add(new HashMap().put(REVIEW, "Search and view the records"));
operations.add(new HashMap().put(UPDATE, "Update the record"));
operations.add(new HashMap().put(DELETE, "Delete the record"));
return operations;
}
...
}
接下来假设说我们有一个针对项目的新增/删除/修改/查询以及失效
操作,先来写我们的form:
public class ProjectForm extends BaseForm {
private static final String FORMNAME = "Project Information";
public static final String INVALID = "invalid";
public String getFormName() {
return FORMNAME;
}
public List getOperations() {
List operations = supper.getOperations();
operations.add(new HashMap().put(INVALID, "Set project as invalid"));
return operations;
}
...
}
再来看看action怎么写:
public ProjectAction extends ... {
//创建项目,其它的方法类似
public ActionForward createProject(....) {
//从session中获取用户信息
User user = ....;
//假设我们有一个类专门处理权限检查
PermissionChecker checker = new PermissionChecker();
checker.setResource(form.getFormName());
checker.check(user, ProjectForm.CREATE);
}
}
上面action中的方法比较丑陋, 其实如果是JDK 5的话就可以用annotation解决就比较优雅了,而且上面的代码还可以进一步重构。
个人认为这么做相对URL的控制有几个好处:
- 很容易就检查到方法是否控制到;
- 方法名的修改不影响用户的配置;
- 在一个地方配置整个系统的URL很容易让人晕菜;
- 不同的模块可以分开指定有哪些需要的操作,比如说其它的模块还需要发布、撤销等操作;
其不足之处就是代码量有所增加,action的方法还需要自己调用一些API,如果用URL控制就可以用filter了。
系统部署后也可以遍历所有配置的form,根据现有的信息就可以配置出想要的permission并授权给角色。
写了半天没提到一点django,呵呵,其实django中自带的 Authentication 模块就是类似的做法,模块自带了CRUD的操作,用户可以在写自己的model的时候增加定制的操作,有兴趣的朋友可以参考这里: http://docs.djangoproject.com/en/dev/topics/auth/#topics-auth
想法是今天回家的路上想的,肯定有很多没考虑到的地方,不知道这种方式是否实际可操作,随后也打算学习一些acegi的原理。
分享到:
相关推荐
本模块就是基于Python3和Django框架实现的RBAC权限控制系统。 首先,我们来看一下Django框架。Django是一个高级的Python Web框架,它鼓励快速开发并遵循DRY(Don't Repeat Yourself)原则。它提供了强大的数据库...
【资源说明】课程设计基于Vue3和Django实现的rbac权限管理系统python源码(含前端)+项目说明.zip在线预览[https://xadmin.dvcloud.xin/](https://xadmin.dvcloud.xin/)账号密码:admin/admin123生成数据表并迁移```...
后端基于Python的Django框架和Django REST Framework实现,前端则使用Vue.js配合ElementUI进行构建。移动端支持通过uniapp和uView框架,能够灵活发布H5和微信小程序。 技术构成: - 主要编程语言:Python - 前端...
【权限管理】基于Django的rbac权限管理系统源码.zip 【权限管理】基于Django的rbac权限管理系统源码.zip 【权限管理】基于Django的rbac权限管理系统源码.zip 【权限管理】基于Django的rbac权限管理系统源码.zip
RBAC权限管理系统项目简介一个基于Django,Django REST框架(DRF),Vue的前布局分离的后台管理系统,可轻松添加业务页面及功能。系统预览特别鸣谢感谢提供的非商业开源软件开发授权感谢提供一级Django框架感谢提供...
【标题】"基于Django+vue3的rbac权限和数据权限管理系统" 是一个现代Web应用的实现,它结合了Python的Django框架与前端的Vue.js 3框架,用于构建一套完整的角色基础访问控制(Role-Based Access Control,RBAC)和...
django-auth-rbac 尝试为Django实现基于角色的访问控制(ANSI / INCITS 359-2004) 支持的RBAC功能: 核心RBAC 分级RBAC 静态职责分离(SSD)基本概念的角色角色提供用户和权限之间的间接级别,通常代表作业功能。...
Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django...
在Django中实现RBAC(基于角色的访问控制)是一种高效的方法来管理用户权限,确保只有具有特定权限的用户能够访问特定的系统功能。在网站中,权限管理至关重要,因为它决定了用户可以访问哪些URL和执行哪些操作。...
Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书...
项目概述:迷你RBAC权限管理服务器是基于Django 3.2.6与...本项目名为"mini-rbac",旨在提供轻量级的角色基础访问控制服务,方便进行权限管理和资源保护,适用于需要在Django和DRF框架下快速实现权限控制的中小型项目。
基于Django的博客系统python实现.zip基于Django的博客系统python实现.zip基于Django的博客系统python实现.zip基于Django的博客系统python实现.zip基于Django的博客系统python实现.zip基于Django的博客系统python实现...
使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现...
Django,作为Python的一个强大的Web框架,提供了丰富的功能来实现RBAC。本模块就是针对Django框架设计的一个RBAC权限控制解决方案,旨在简化权限管理的复杂性。 **核心概念** 1. **角色(Role)**: 角色是一组特定...
python项目基于django的旅游网站的实现.zippython项目基于django的旅游网站的实现.zippython项目基于django的旅游网站的实现.zippython项目基于django的旅游网站的实现.zippython项目基于django的旅游网站的实现....
1.Django 搜索结果分页的实现 在这里我们用django自带的分页模块来实现 这个paginator对象中带有如下属性: #per_page:每页显示条目数量 #count:数据总个数 #num_pages:总页数 #page_range:总页数的索引范围,如...
在本文中,我们将深入探讨如何使用Django框架来实现用户登录和注册功能,这对于任何Web应用程序来说都是核心组件。Django是一个用Python编写的高级Web框架,它鼓励快速开发和简洁实用的设计理念。 首先,我们需要...
django,rbac,seesion中间件权限校验
基于RBAC模型权限控制的中小型应用的基础开发平台,前拆分,替代采用django + django-rest-framework,前端采用vue + ElementUI,移动端采用uniapp + uView(可发布h5和小程序)。 JWT认证,可使用simple_history...
基于Django+Vue3的rbac权限管理系统源码.zip基于Django+Vue3的rbac权限管理系统源码.zip基于Django+Vue3的rbac权限管理系统源码.zip基于Django+Vue3的rbac权限管理系统源码.zip基于Django+Vue3的rbac权限管理系统...