`
qiezi
  • 浏览: 498808 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[RoR] 简单的角色权限检查插件

    博客分类:
  • Ruby
 
阅读更多
代码比较简单:

module ActionController #:nodoc:

  class CheckGroupError 
< ActionControllerError #:nodoc:
    attr_reader :group_name
    def initialize(group_name)
      
@group_name = group_name
    end
  end
  
  class CheckRoleError 
< ActionControllerError #:nodoc:
    attr_reader :role_name
    def initialize(role_name)
      
@role_name = role_name
    end
  end
  
  class Base 
#:nodoc:
    def roles
      []
    end
    
    def groups
      []
    end
    
    def check_roles(
*role_args)
      role_args
.each do |role|
        check_role(role)
      end
    end
    
    def check_groups(
*group_args)
      group_args
.each do |group|
        check_group(group)
      end
    end
    
    def check_group(group)
      raise CheckGroupError
.new(group.to_s) unless groups().include?(group.to_s)
    end
    
    def check_role(role)
      raise CheckRoleError
.new(role.to_s)   unless roles().include?(role.to_s)      
    end
  end
  
end

只需要在ApplicationController中实现roles和groups这2个方法,对数据库模式没有任何限制,只要能保证这2个方法能够得到当前用户的角色和组即可。

有4个check方法可用,可任意使用一个或多个。

简单模拟测试一下:

class ApplicationController < ActionController::Base
  def roles
    
%w(add show)
  end

  def groups
    
%w(users)
  end
end

class TestController < ApplicationController
  def test1
    check_role 
:add
    render_text 
"OK"
  end

  def test2
    check_role 
:add
    check_group 
:users
    render_text 
"OK"
  end

  def test3
    check_groups 
:admin, :users
    render_text 
"OK"
  end

  def test4
    check_roles 
:add, :remove
    render_text 
"OK"
  end
end

其中,test1、test2都会成功,而test3和test4则会失败显示异常,只需要处理rescue_action把它修改为自己的显示页面即可。
分享到:
评论
1 楼 eltonto 2007-04-06  
现在还看不明白,唉

相关推荐

    ror文本编辑插件

    "ror文本编辑插件"显然是一种专为Rails应用设计的工具,旨在提升用户在网页上编辑文本的体验。这个插件可能包含丰富的功能,如富文本编辑、格式化选项、图片上传等,使得内容创建更加便捷和直观。 Ruby on Rails是...

    RoR性能优化经验谈

    RoR(Ruby on Rails)是一种流行的开源Web开发框架,以其高效和简洁的代码著称。然而,随着网站规模的增长,性能优化成为必不可少的环节。在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在...

    ror

    NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696

    ror中文资料

    **Ruby on Rails(简称RoR)中文资料** Ruby on Rails(RoR)是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。RoR强调“约定优于配置”...

    神经网络ror resenet模型

    **神经网络Ror ResNet模型详解** 在深度学习领域,ResNet(残差网络)模型是具有里程碑意义的创新,由He et al.在2015年提出。该模型解决了深度神经网络训练中的梯度消失问题,允许构建非常深的网络结构。而“Ror”...

    RoRBlog 基于RoR的博客系统

    基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。

    初探ROR

    **初探ROR** Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进开发过程的简洁性和效率。Ruby on Rails的核心理念是“Don't Repeat ...

    ROR安装必备所有架包

    在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...

    ror实例

    Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...

    RoR News-crx插件

    RoR News-crx插件是一款基于Chrome浏览器的扩展程序,主要设计用于与Project Broomble的JSONp API进行交互,以实现对Link Aggregator服务Broomble的集成和使用。这款插件是英文版本,因此面向的是全球英文用户群体。...

    RoR选题方向—源代码

    Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程。在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是...

    Windows 上搭建 ROR环境

    ### Windows上搭建Ruby on Rails(ROR)环境详解 #### 一、引言 随着Web开发技术的不断发展,Ruby on Rails(简称Rails或ROR)作为一种高效、简洁且优雅的Web开发框架,受到了广大开发者的青睐。然而,在Windows...

    RoR中文解决方案(很不错哦)

    描述中提到的“插件”可能是指RoR的一些中文支持插件,这些插件可以帮助开发者更好地处理中文字符集,避免编码错误。同时,它提到了“mysql-front备份文件”,这通常指的是一个用于图形化管理MySQL数据库的工具,...

    ROR环境配置

    总结来说,配置ROR开发环境包括安装Ruby、Rails,创建ROR项目,以及在Eclipse中设置ROR插件和导入项目。在Eclipse中进行ROR开发,可以充分利用其丰富的功能,提升开发效率。理解并熟练运用ROR的MVC架构和相关工具,...

    RoR 培训课程PPT

    ### RoR培训课程PPT知识点概述 #### 一、课程概览与背景介绍 - **课程性质**:本课程为为期五天的Ruby on Rails(简称RoR)入门级培训,适合初学者快速掌握RoR的基本概念和技术要点。 - **讲师信息**:由Peter ...

    ROR 文件的上传与下载

    ### ROR 文件的上传与下载:深入解析与实践 在Ruby on Rails(简称ROR)框架下,处理文件的上传与下载是一项常见的需求,尤其是在构建包含媒体内容的应用程序时。本文将基于给定的文件信息,详细阐述如何在Rails...

    freemis 基于ror框架的mis

    4. **社区支持**:RoR拥有庞大的开发者社区,这意味着FreeMIS可以利用众多开源插件和库,以及丰富的文档和教程资源。 5. **安全性**:RoR内置了多种安全机制,如CSRF(跨站请求伪造)防护、XSS(跨站脚本)防护等,...

Global site tag (gtag.js) - Google Analytics