-
如何应用权限管理系统到实际中?50
我自己做了一个基于角色控件的权限管理系统
表结构:引用users:
id,name,password
roles_users:
roles_id,users_id
roles:
id,name
permissions_roles:
permissions_id,roles_id
permissions:
id,name,action
大家一看就应该明白这几张表是什么关系了吧?一个用户可以拥有多个角色,一个角色也可以拥有多个用户,一个角色可以拥有多个操作权限,而一个操作权限也可以属于多个角色.
另外要说的一点就是:在表permissions中,name表示操作的名字,就是用来显示在页面上的,如"删除新闻",而action是就代表真正的操作.
现在对于user,role,permission的操作我都实现了(包括对usser对role的勾选和role对permission的勾选)
而且在我的User模型中,我也写了方法,用以取得user所拥有的权限:class User < ActiveRecord::Base has_and_belongs_to_many :roles #User login validate def self.login_validate(name, password) user = User.find_by_name(name) if user if user.password == password return user else user = nil end end user end #Get user's all permissions def permissions user_permissions = Array.new for role in self.roles user_permissions += role.permissions end user_permissions end end
现在说说对于这个系统,我的思想.我的权限主要是用于后台管理方面的(/admin),因此在/app/controllers/admin下有class Admin::AdminController < ActionController::Base #Set layout for Admin board layout "admin" before_filter :authorizate def authorizate puts "authorizate" is_login? #这里现在写什么啊?大家给指点一下啊 end #Validate the user has loged in or not def is_login? unless session[:user] flash[:notice] = "Please login first!" redirect_to "/login" end end end
对于admin模块下的其它controller,都是继承这个Admin Controller,我现在就是迷惑了,不知道如何验证权限.
我以前用Java做权限管理系统(SSH),大体思想是这样的:所用的操作最终都是基于URL请求的,eg:http://localhost:8080/admin/postAction.do?method=list(postAction代表了一个模块,而list代表了一个操作)
我在用户登录是就把用户的权限操作列表保存到Session中,然后写一个作用于/admin的过滤器,用来检查当前登录用户的权限列表中的许可的url是否包含请求的url,这样就能实现权限的管理.
然而现在在rails中,url不适用了,大家给指点一下,如何基于我目前所做的来应用这个权限验证.
问题补充:
难道我还要在/admin模块下的每一个controller中的action方法中加入判断当前登录的用户是否拥有权限?
如在Admin:ostController中
def index
#if session[:user].permissions has "post_index" ? if not,redirect to 'you have no permission to do this!!' page
end
哇,要是这样我累死了!!
希望大家不要给的是与这样类似的答案,说简单是一点就是,我想尽量让我的权限管理与业务无关,也就是说移植性要好!!!
问题补充:
谢谢xxj,我现在的Admin::PostController是这样的class Admin::PostsController < Admin::AdminController before_filter :authorize, :only => [:index, :show, :new, :edit, :destroy] def authorize logger.debug self.controller_name << "/" << self.action_name logger.debug "-------------------------#{self.action_name}" logger.debug session[:user].permission_urls[3] p session[:user].permission_urls[3] == (self.controller_name << "/" << self.action_name) unless session[:user].permission_urls.include?( self.controller_name + "/" + self.action_name ) flash[:notice] = "You have not permission to do it!" redirect_to :controller => "admin/welcome" end end
我的permission_urls中明明存在"posts/index",为什么我请求/admin/posts/始终跳到没有权限的提示页面呢?我用pust输入作了二者的比较,明明相等,却还是输出false2008年7月09日 09:27
4个答案 按时间排序 按投票排序
-
采纳的答案
一: url当然可以适用的,你可以获取当前的controller 和 action,然后跟你之前一样的操作就可以了。在rails中是很方便的
puts self.controller_name
第二: 没必要这么紧耦合的,你可以做成plugins,偷懒的话也可以考虑简单的写个module,然后mixin进去,就可以了。譬如:class Admin::AdminController < ActionController::Base include AuthenticatedSystem end
module AuthenticatedSystem def self.included(target) target.send :before_filter, :authorized? end #... def authorized? true end end
这样业务代码就无效关系权限了,权限单独的运行。当然如果做的好的话,可以做成plugins共享给大家使用2008年7月09日 13:20
-
logger.debug self.controller_name << "/" << self.action_name
这里已经改变了controller_name的值了
现在controller_name 已经是"posts/index"了
p session[:user].permission_urls[3] == (self.controller_name << "/" << self.action_name)
这里为false是正确的,但是此时的controller_name已经被你通过"<<"改变了
unless session[:user].permission_urls.include?( self.controller_name + "/" + self.action_name ) end
这里显然不再是"posts/index"了,而是"posts/index/index/index"了,因为你已经两次操作"<<"了
将上面的修改成临时变量好了
before_filter :authorize def authorize url = "#{self.controller_name}/#{self.action_name}" p session[:user].permission_urls[3] == url unless session[:user].permission_urls.include?(url) flash[:notice] = "You have not permission to do it!" redirect_to :controller => "admin/welcome" end end
2008年7月10日 10:36
相关推荐
在实际应用中,权限管理系统可能会集成其他功能,如角色管理(创建、修改、删除角色)、权限分配界面(直观展示权限树结构,方便管理员分配权限)、审计日志(记录用户操作,便于追溯和分析权限使用情况)等。...
【通用权限管理系统源码】是基于ASP.NET技术开发的一个完整的权限管理解决方案,它主要用于帮助企业或组织构建具有精细权限控制的后台管理系统。ASP.NET是微软公司推出的一种强大的Web应用程序框架,它构建在.NET ...
在IT行业中,权限管理系统(PMS)是确保应用程序安全的重要组成部分,它负责管理用户对系统资源的访问权限。权限通常以角色为基础(Role-Based Access Control, RBAC),通过定义不同的角色并为每个角色分配相应的...
Java Web权限管理系统是一种基于Web的应用程序,用于管理和控制不同用户对系统资源的访问权限。它通常采用分层架构,结合了多种技术来实现安全、高效的功能。在这个系统中,我们看到核心的技术栈包括Spring、...
在实际应用中,权限管理系统还应具备审计功能,能够记录用户的登录、操作和权限变更等行为,以便在发生问题时进行追溯。同时,为了确保数据安全,系统还需要具备安全策略,如密码策略、访问控制机制和异常检测等。 ...
在IT行业中,权限管理系统是构建安全、高效应用的关键组成部分,特别是在多用户环境中。本文将深入探讨基于C#的权限管理系统...通过这个项目,开发者可以深化对权限管理系统的理解和实践,提高在实际工作中的应用能力。
3. **MyBatis**:虽然本系统未使用数据库,但在实际的权限管理系统中,MyBatis常用于持久层操作。它可以将SQL语句映射到Java方法,简化了数据库访问。如果存在数据库,MyBatis会处理用户、角色和权限的数据增删改查...
权限管理系统是一种用于控制不同用户或角色在计算机系统、网络服务或应用程序中访问资源的重要工具。在本文中,我们将深入探讨权限管理系统的概念、设计、实现以及相关技术。 首先,权限管理系统的核心目标是确保...
通过以上分析,我们可以看到这个“简单权限管理系统”涵盖了Web开发中的基础架构、前端框架以及数据库操作等多个方面,是初学者了解权限管理系统实现的一个良好起点。不过,实际生产环境中,权限管理往往更复杂,...
通过研究这个【PHP权限管理系统源代码】,开发者不仅可以学习到如何在PHP中实现权限控制,还可以掌握如何构建一个完整的Web应用程序,包括用户认证、数据库操作、路由设计以及安全实践等多个方面。这对于提升PHP开发...
权限管理系统是软件开发中不可或缺的一部分,它负责对系统资源进行访问控制,确保数据安全和用户操作的合法性。一个基本的权限管理系统通常包含以下几个核心模块:权限树、用户管理、角色管理和界面权限。下面将详细...
总结起来,.NET权限管理系统源码结合了.NET的开发优势和EasyUI的前端便捷性,为开发者提供了一个高效、易用的基础框架,通过深入学习和实践,开发者可以掌握权限管理的核心概念和技术,提升在实际项目中的应用能力。
《通用权限管理系统——深入解析与实现》 在信息化社会中,权限管理是系统设计的关键环节,它涉及到用户...开发者可以根据实际需求选择合适的实现方式,并参考设计文档和提供的工具,高效地构建起自己的权限管理系统。
权限管理系统则是这类应用中不可或缺的一部分,它负责控制用户访问资源的权限,确保系统安全性和数据保护。下面将详细介绍这两个技术以及权限管理系统的实现。 Servlet是Java编程语言的一个接口,允许Java代码与...
"MSFM权限管理系统 v1.0.zip" 是一个包含源码和相关资源的压缩包,主要...通过深入研究和实践MSFM权限管理系统,开发者和学习者可以掌握权限管理的核心原理,以及如何将其应用于实际项目中,提升自身的软件开发能力。
在“狼奔权限管理系统”中,核心概念是权限管理。权限管理是后台系统中的关键部分,它确保用户只能访问他们被授权的功能和数据。系统可能包括角色、用户和权限三个主要元素: 1. **角色(Role)**:角色是一组权限...
《EasyUI基本权限管理系统详解》 EasyUI是一个基于jQuery的前端UI框架,它提供了一系列精美的组件,如对话框、菜单、按钮、表格等,帮助开发者快速构建用户界面。在开发复杂的Web应用时,权限管理是不可或缺的一...
这使得用户能够在MySQL环境中快速部署和测试权限管理系统,无需从零开始构建数据库结构。 【标签】:“java/mysql 权限管理系统 源码”标签明确了技术栈,即Java作为后端开发语言,MySQL作为数据库管理系统。Java是...
在软件开发领域,权限管理系统是企业级应用不可或缺的一部分,它确保了数据安全性和操作的合规性。本篇文章将深入探讨一个基于C# Winform技术,利用DevExpress控件库构建的通用权限管理系统。这个系统具有多主题功能...
7. 权限管理系统的技术选型及实现框架:文章中提到了权限管理系统的技术选型,其中涉及到了Docker容器技术、云计算技术以及RBAC模型。设计者需要基于这些技术构建出一个高效、安全且易于管理的权限管理系统架构。 8...