- 浏览: 116220 次
- 性别:
- 来自: 南京
最新评论
-
yuanfen2014:
学习,学习了
Nginx 301永久重定向 -
yuanfen2014:
[color=blue][/color]
Nginx 301永久重定向 -
lippor:
如何读取啊,怎么都是创建
使用PHP创建 PowerPoint2007 文档 -
huangyunbin:
有很多表的时候,一个一个手动改吗,好麻烦啊,有不有快的方法
mysql导入数据时 USING BTREE 错误解决办法 -
fanyilong_v5:
哥们 第二种 方法 牛逼完了
关于phpcms v9的get标签里面的sql 语句limit无效问题的解决方法
用了Rails2 以后,所有的东西都要去寻求插件帮助了, 在网上找了篇文章,好像还是挺有用的。我在本地使用act_as_authenticated 插件和Role_requirement插件还是配置成功了的
关键词: authorization(授权认证) authentication(登录认证) role based authorization Role Requirement Role Based Access Control (RBAC)
相关链接:
http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.bencurtis.com/archives/2007/06/user-roles-in-rails-applications/
http://wiki.rubyonrails.com/rails/pages/Authentication+and+Security+Plugins
http://code.google.com/p/rolerequirement/
http://active-rbac.rubyforge.org/
http://wiki.rubyonrails.org/rails/pages/ActiveRBAC
http://active-rbac.rubyforge.org/
http://rubyforge.org/projects/activeacl/
http://www.billkatz.com/authorization(Authorization Plugin 详解)
http://railsforum.com/viewtopic.php?pid=2329
http://agilewebdevelopment.com/plugins/search?search=role
http://blog.wolfman.com/articles/2006/05/20/role-based-authentication-admin-page
http://www.writertopia.com/developers/authorization (Authorization Plugin 使用说明 Version 1.0 (Sept 13, 2006))
http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated
other tips:
(较长,略)
my tips:
ActiveRBAC :
太复杂,要建立9个表!
Authorization plugin:
可配合已有登录系统使用,但需要登录系统提供一个current_user 方法(取当前已登录的用户对象)作为接口(可在ApplicationController中自定义)
每个角色需要建立一个表?from http://www.billkatz.com/authorization
语法怪异,但功能比较丰富
支持:only,:except等选项。
支持无数据库调用hardwired模式(AUTHORIZATION_MIXIN='hardwired')
支持acts_as_authorizable as well as acts_as_authorized_user:
user.has_role? 'member', Group
支持单表继承来实现多态
先在controller中设置基本权限,然后在每个action里细分权限:
class MeetingController < ActionController::Base
permit "registered", :except => :public
def public
# Anybody can access this action
end
def list
# Any "registered" user can access this action.
...
end
def add_item
# Only moderators of this meeting or a user who is an admin can add items.
permit "moderator of :meeting or admin", :meeting => Meeting.find(params[:id]) do
...
end
end
def edit
# Editing is limited to the admin of this meeting or users who have a global admin role.
@meeting = Meeting.find(params[:id])
if permit? "(admin of :meeting) or admin" # Note that no :meeting hash is provided, so @meeting is used.
# Do editing
end
end
protected
# 非公开action的保护方法
def remove_moderator
# 只允许 对象所有者 或者 管理员
permit "admin of :meeting or admin"
...# do remove process
# 删除对象后 移除 对象权限的关联
permit_set "not moderator of :meeting", :user => @removed_member
end
end
The difference between permit and permit? is redirection. permit redirects by default. permit? can be used within expressions and does not redirect by default.
User engine :
配置复杂,而功能却简单,只做到controller/action级别的限制,但有不错的view helper方法,如 link_if_authorized(controller, action),authorized?(controller, action)
RoleRequirement :
http://code.google.com/p/rolerequirement/
需先安装acts_as_authenticated 插件,(会覆盖掉unknown action)
添加两个表:roles和users_roles (通过生成器生成,名字可配置),
可建立role 或roles 两种不同关联(has_one :role 或has_many :roles),roles可以配置为enum column
权限直接在controller里设置(应该可扩展出把权限保存到数据库了,读出时覆盖controller里的默认设置),
有has_role?('admin')的辅助方法,
核心方法(controller instance method)user_authorized_for?(user_object, params = {:controller=>"user", :action=>"edit"})
view的辅助方法有:url_options_authenticate?({:controller=>"user", :action=>"edit"})
可扩展出@user.authorized_for?("/user/edit") (再尝试扩展出动态方法:@user.can_{action}_{controller}? )
似乎可扩展出object级别的限制(Business Object Permissions ):require_role "admin", :only => :update, :unless => "current_user.authorized_for_listing?(params[:id]) "
用法类似before_filter,可添加only和except来指定排除:
# * :only - Only require the role for the given actions
# * :except - Require the role for everything but
# * :if - a Proc or a string to evaluate. If it evaluates to true, the role is required.
# * :unless - The inverse of :if
class Admin::Listings < ApplicationController
require_role "contractor"
require_role "admin", :only => :destroy # don't allow contractors to destroy
end
步骤:
1.分别安装acts_as_authenticated rolerequirement
# rolerequirement的用法在README,在线的wiki没用
2.用acts_as_authenticated的generator生成user model和user controller:
#script/generate authenticated UserModelName UserControllerName
script/generate authenticated user users
(rolerequirement需要一个current_user方法做接口,如果上面生成的UserModelName不是"user",如是"person",则需要在ApplicationController里alias一个同名方法,如 alias :current_user :current_person)
# UsersController 会添加4个action: index login signup logout
#2.2 执行rake db:migrate
3.用rolerequirement的generator生成role model(留意生成完后有提示,会修改user model及ApplicationController的代码 http://code.google.com/p/rolerequirement/wiki/WhatTheGeneratorsDo):
#script/generate roles RoleModelName UserModelName
script/generate roles role user
#3.2 执行rake db:migrate
4.添加权限限制到controller中
class RolesController < ApplicationController
scaffold :role
require_role "admin"
end
5.在console里添加一个role到user
user = User.find(:first)
role = Role.find_or_create_by_name "admin"
user.roles << role unless user.roles.any?{ |r| r.name == role.name }
# 默认在User model里的has_role?方法总是返回true,如果user里有'admin' role
Active Acl:
基于 phpgacl的设计;使用polymorphic(因此需要安装has_many_polymorphs 插件) 做关联(一般都是用habtm)。封装了网状查询,只用一条SQL就能得到所有的权限数据;调用方法: current_user.has_permission?(User::LOGIN) and object level (3D, like admin.has_permission?(Forum::ADMIN, :on => team_forum)) ,设置太复杂
ACL System:
http://agilewebdevelopment.com/plugins/acl_system
可配合已有的登录系统使用,需要current_user 方法作为接口(若要改变则要hack源码),需要一个role model,且有个title属性(若要改变则要hack源码),并在user中设置habtm联系,代码也很简单。(评分挺高 Rating: 4/5 (42 votes))
没有user.has_role?('admin')这样的辅助方法
不支持直接判断controller和action,如 user.can_access?(controller, action)
需添加两个表:roles和roles_users(注意表名),权限直接在controller里设置,主要是access_control,但还要显式的与before_filter :login_required配合使用,比较麻烦:
class PostController < ApplicationController
before_filter :login_required, :except => [:list, :index]
access_control [:new, :create, :update, :edit] => '(admin | user | moderator)',
:delete => 'admin & (!moderator & !blacklist)'
end
class PostController < ApplicationController
before_filter :login_required, :except => [:list, :index]
access_control :DEFAULT => '!guest' ,
[:new, :create, :update, :edit] => '(admin | user | moderator)',
:delete => 'admin & (!moderator & !blacklist)'
end
在view中用法:
<% restrict_to "(admin | moderator) & !blacklist" do %>
<%= link_to "Admin & Moderator only link", :action =>'foo' %>
<% end %>
或
<% if permit? "(admin | moderator) & !blacklist" %>
you can ...
<% else %>
you can't ...
<% end %>
access_control :
使用较麻烦,用法类似linux的权限控制(rwx),让人迷糊,部分功能未完成:
class AdminController < ApplicationController
authorize "admin:rw"
authorize "admin:x", :only => :special_action
def index
...
end
def special_action
...
end
end
最后选择了RoleRequirement,并扩展实现了:
@user.can_{action}_{controller}?
如:
@user.can_edit_post?
下一步:model security,如:
@user.can_edit_post?(@post)
发表评论
-
一个异常:Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .c
2013-05-14 14:17 4771今天在创建了一个工程,编译并部署到tomcat后,发现出现了 ... -
2012-03-19 11:15 关于excel 2007需要关闭两次的解决办法
2012-06-25 10:16 1127最近我发现我关EXCEL中,我是关闭最上面右角的叉,但是不能完 ... -
mysql导入数据时 USING BTREE 错误解决办法
2012-06-04 15:06 2286今天在往测试数据库导入数据时,其中一个供应商表报USING B ... -
css完美解决图片太大撑破表格 自适应图片按比例缩小
2011-10-29 00:46 1403<style type="text/css&q ... -
Mysql MyIsam引擎和InnoDB引擎的区别
2011-08-30 11:23 1117【总结】: 两种类型最主要的差别就是 InnoDB 支持事务处 ... -
Nginx 301永久重定向
2011-04-08 22:08 1165最近需要做SEO优化,将网站域名做成301永久重定向,不说了直 ... -
PHPCMS后台无法显示验证码
2011-02-24 19:55 1938查看了下php.ini文件GD库扩展已经开启了,还是显示个红X ... -
asp.net配置IIS后"服务器应用程序不可用"的解决办法 服务器应用程序不可用 您试图在此Web服务器上访问的Web应用程序当前不可用
2010-04-14 22:17 11798错误:服务器应用程序不可用 您试图在此Web服务器上访问的W ... -
Asp.net 默认配置下,Session莫名丢失的原因及解决办法
2009-05-29 10:57 1118我们平时写的asp.net程序 ... -
关于NullPointerException的引发原因
2009-05-14 19:47 3180NullPointerException,为什 ... -
addActionError与addFieldError
2009-05-13 17:03 1756addActionError() 与addFieldEr ... -
C#的显式接口和隐式接口
2009-05-01 21:03 1797接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的 ... -
无法加载 DLL xpstar90.dll 的解决办法
2009-04-11 15:58 3873大家在安装VS2005后,系统自动会安装SQLEXPRESS, ... -
关于数据库外键类型的认识
2009-04-04 02:12 1233开头先贬低下自己,2年前学到数据库知识终于原原本本的还给 ... -
MySql遇到ErrorNo:28解决方法
2009-02-24 23:20 1185今天晚上接到电话,说是论坛不能访问,discuz7搭 ... -
使用cxf 关于JAXB2.1和JDK1.6/6.0版本不一致的问题 --已解决
2009-02-22 14:25 2372这段时间因为要做毕业设计,涉及到要使用WebService完 ... -
关于Struts2中visitor校验器的解决方法
2009-01-02 23:47 3095这段时间重新开始拾起JAVA的学习,也是为了以后的工作打 ... -
关于在MyEclipse中使用Hibernate
2009-01-02 20:39 3209在早期的 Java 数据库和 ... -
如何正确地在Axis、Axis2和Apache CXF之间抉择?
2008-12-29 21:40 1152新一代的 Web Services 框 ... -
关于rails安装mysql驱动报错问题
2008-12-20 23:46 1220我在本地用的是wamp server的一键包,只使用了m ...
相关推荐
"Sign"可能是项目的登录或注册模块,它涉及用户认证和授权。在Rails中,可以使用Devise这样的gem来处理用户身份验证,提供注册、登录、密码重置等功能。用户模型通常会包含确认令牌、加密密码等相关字段。 4. **...
4. **实现认证和授权机制**:为了保证API的安全性,需要实现用户认证和权限管理功能,例如使用JWT(JSON Web Tokens)、OAuth等方式。 5. **错误处理**:定义一套统一的错误处理策略,当请求无法正确处理时能够向...
例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...
例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传等。 此外,本书还会介绍Rails的安全实践,包括防止SQL注入、XSS攻击等常见Web安全问题。你将学习如何使用strong parameters...
书中会讲解如何利用这些工具进行数据库操作、表单处理、认证与授权,以及如何与其他服务和API集成。 此外,《Agile Web Development with Rails》还涵盖了测试驱动开发(TDD)和行为驱动开发(BDD)。TDD强调先写...
在Rails应用中,用户认证和授权是常见的需求,用于保护应用资源的安全。"http_authentication"和"restful-authentication"是两个早期的Rails登录和验证插件,它们为Rails应用提供了基本的身份验证功能。 HTTP基本...
13. **社区插件(Gems)**:Rails的生态系统中有大量高质量的第三方Gem,如Devise(用户认证)、Pundit(授权管理)、Paperclip或Carrierwave(文件上传)等,它们可以极大地扩展Rails的功能。 通过研究这个源码,...
标题 "Rails3+GithubOAuth2+设计示例应用程序" 提供了我们正在处理一个使用Rails 3框架构建的Web应用程序,该应用集成了Github的OAuth2授权机制。Rails是Ruby on Rails的简称,是一个流行的开源Web开发框架,以其DRY...
1. **用户认证与授权**:内置了用户注册、登录、权限管理等功能,可以轻松实现用户身份验证和角色权限控制,确保后台的安全性。 2. **数据可视化**:集成了一系列图表库,如Chart.js和Morris.js,用于数据展示和...
6. **插件和gem**:Rails社区有大量的插件和gem可供扩展功能,如Devise用于用户认证,Cancancan用于授权,或者Paperclip和Carrierwave处理文件上传。 7. **Ajax和JavaScript**:Rails 2.2.2支持集成Prototype ...
- 令牌认证(token authentication)。 - 外部服务集成,如 OAuth。 #### 七、文件上传 第九章讨论了 **文件上传** 的实现方式,这是 Web 应用中常见的功能之一。 - **文件上传**: - 实现用户可以上传图片、文档...
在实战篇中,读者可以学习如何构建实际的Web应用程序,包括用户认证、授权、会话管理、RESTful API设计、前端集成如使用Bootstrap或Vue.js等。此外,可能会涉及到Rails与其他服务的集成,如使用OAuth进行第三方登录...
标题《Rails3 device and cancan》与描述《ROR ruby on rails device plugin教程》指出本文是关于如何在Rails 3.2应用程序中整合Devise认证插件和Cancan授权插件的教程。Devise是一个流行的Ruby on Rails的认证解决...
此外,Angle-admin可能包含了用户认证和授权的解决方案,如Devise或CanCanCan,确保只有授权用户才能访问特定资源。 10. **测试**:Rails鼓励TDD(Test-Driven Development)和BDD(Behavior-Driven Development)...
7. 认证与授权:Rails API通常需要处理认证和授权问题。这可以通过如Devise这样的库实现用户身份验证,而Pundit或CanCanCan则可用来处理权限控制。 8. 分页与过滤:为了提高性能和用户体验,API通常需要支持分页和...
10. **社区工具和插件**:介绍一些常用的Rails gem,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传等。 附带的`rr2-code.zip`文件很可能包含了书中各章节示例代码,这将有助于读者更好地理解和实践书...
- **安全性**:探讨如何确保应用的安全性,包括认证、授权和输入验证。 - **部署和生产环境配置**:提供部署Rails应用的最佳实践,以及如何在生产环境中优化性能。 - **高级主题**:涉及一些进阶的话题,如性能调优...
Rails是构建Web应用程序的利器,它提供了许多内置的功能来简化开发过程,包括身份验证和授权。在描述中提到的"Knock"是一个专门为Rails API设计的库,它帮助开发者实现JSON Web Token(JWT)的身份验证,这是一种...