- 浏览: 2081874 次
- 性别:
- 来自: NYC
-
文章分类
- 全部博客 (628)
- Linux (53)
- RubyOnRails (294)
- HTML (8)
- 手册指南 (5)
- Mysql (14)
- PHP (3)
- Rails 汇总 (13)
- 读书 (22)
- plugin 插件介绍与应用 (12)
- Flex (2)
- Ruby技巧 (7)
- Gem包介绍 (1)
- javascript Jquery ext prototype (21)
- IT生活 (6)
- 小工具 (4)
- PHP 部署 drupal (1)
- javascript Jquery sort plugin 插件 (2)
- iphone siri ios (1)
- Ruby On Rails (106)
- 编程概念 (1)
- Unit Test (4)
- Ruby 1.9 (24)
- rake (1)
- Postgresql (6)
- ruby (5)
- respond_to? (1)
- method_missing (1)
- git (8)
- Rspec (1)
- ios (1)
- jquery (1)
- Sinatra (1)
最新评论
-
dadadada2x:
user模型里加上 protected def email ...
流行的权限管理 gem devise的定制 -
Sev7en_jun:
shrekting 写道var pattern = /^(0| ...
强悍的ip格式 正则表达式验证 -
jiasanshou:
好文章!!!
RPM包rpmbuild SPEC文件深度说明 -
寻得乐中乐:
link_to其实就是个a标签,使用css控制,添加一个参数: ...
Rails在link_to中加参数 -
aiafei0001:
完全看不懂,不知所然.能表达清楚一点?
"$ is not defined" 的问题怎么办
第三部分,权限设计和acl插件的使用。感觉这样的权限设计也是很主流的。
下面,再看看EOL.ORG在权限设计方面是如何实现的,或者使用了什么插件。
用户角色设计和权限管理
EOL.org的权限部分采用acl_system plugin的插件,地址如下
http://brainspl.at/articles/2006/02/20/new-plugin-acl_system
机制如下:
那么,保证权限正确限制,可以从以下几个方面实现:
1. 保证用户必须登录才能访问特定的action或contoller。那么只需要添加如下语句在controller的开始:
这段检查并不是角色有关的检查,只是简单的提供登录限制。
2. 实现特定的用户访问特定的controller。那么需要在指定的controller,添加
这一个检查,将针对用户的角色(即分配给user的role)来限制controller的读取。如果,想了解很进一步的有关机制,可以查阅我们使用的plugin(acl_system2)的README说明文档。那里的例子还不错。
3. 项目还提供很方便的controller/helper 方法用来检查user是否隶属于某一特定角色或者角色群。("is_user_in_role?"
)
4. 项目本身也支持对页面的某一特定的代码段或页面功能段,进行权限设定。这需要调用acl 插件的helper方法对该代码段添加基于用户权限的修饰。例如:
管理功能的实现
管理功能是在用户权限设计的基础上,增加一个管理功能:
1.所有管理功能的controller都在administrator目录下创建。管理权限的第一次限制
2. 对于的功能将从生成的Controller下派生
3. 相对应的试图页面在administrator目录下 "views/administrator",
4. 根据需要,在适当的时候,可以添加新的管理角色
5. 在管理页面的controller最开始增加限制
这将用于保证只有拥有管理角色的用户才能访问administrator目录下的controller
6. 通过在管理界面的导航栏添加菜单,以便增加到新controller的连接。修改如下文件
则所有页面导航的连接,将直接受到上一步我们设置的限制。
7.保证至少有一个用户有控制和登录管理界面的权限。不能删除最后的管理用户,否则系统将没有管理功能。
日志系统设计
日志的功能通过类似数据采集系统的方式实现。在config/database.yml文件中,定义的独立的数据库,用来保持所有的日志信息。对Models的日志和对于用户行为操作的记录,被分为两类数据表 dimension和facts。鉴于效率和数据大小的考虑,项目中数据库没有进行更多的授权访问设置。在产品模式下,将会有严格的保护措施,以便不会误删数据。可是在开发模式,就有很多对应的开发和模拟数据方法,如下:
或者这时也可以通过一句命令实现以上操作
项目同样支持cron的定时操作,对特定时间区间进行日志操作,如下:
下面,再看看EOL.ORG在权限设计方面是如何实现的,或者使用了什么插件。
用户角色设计和权限管理
EOL.org的权限部分采用acl_system plugin的插件,地址如下
http://brainspl.at/articles/2006/02/20/new-plugin-acl_system
机制如下:
- 用户可以分配零个或多个角色
- 一个或多个Controller可以隶属于一个角色
那么,保证权限正确限制,可以从以下几个方面实现:
1. 保证用户必须登录才能访问特定的action或contoller。那么只需要添加如下语句在controller的开始:
before_filter :check_authentication
这段检查并不是角色有关的检查,只是简单的提供登录限制。
2. 实现特定的用户访问特定的controller。那么需要在指定的controller,添加
access_control :DEFAULT => 'ROLE NAME GOES HERE'
这一个检查,将针对用户的角色(即分配给user的role)来限制controller的读取。如果,想了解很进一步的有关机制,可以查阅我们使用的plugin(acl_system2)的README说明文档。那里的例子还不错。
3. 项目还提供很方便的controller/helper 方法用来检查user是否隶属于某一特定角色或者角色群。("is_user_in_role?"
)
do_this_method_only_for_admins if is_user_in_role?('Administrator')
4. 项目本身也支持对页面的某一特定的代码段或页面功能段,进行权限设定。这需要调用acl 插件的helper方法对该代码段添加基于用户权限的修饰。例如:
<% restrict_to "(Administrator) & !blacklist" do %> admin stuff here <% end %>
管理功能的实现
管理功能是在用户权限设计的基础上,增加一个管理功能:
1.所有管理功能的controller都在administrator目录下创建。管理权限的第一次限制
Administrator::NewContollerName
2. 对于的功能将从生成的Controller下派生
class Administrator::NewContollerName < AdminController
3. 相对应的试图页面在administrator目录下 "views/administrator",
views/administrator/new_controller_name
4. 根据需要,在适当的时候,可以添加新的管理角色
5. 在管理页面的controller最开始增加限制
access_control :DEFAULT => 'ROLE NAME GOES HERE'
这将用于保证只有拥有管理角色的用户才能访问administrator目录下的controller
6. 通过在管理界面的导航栏添加菜单,以便增加到新controller的连接。修改如下文件
"views/admin/_navigation.html.erb"
则所有页面导航的连接,将直接受到上一步我们设置的限制。
7.保证至少有一个用户有控制和登录管理界面的权限。不能删除最后的管理用户,否则系统将没有管理功能。
日志系统设计
日志的功能通过类似数据采集系统的方式实现。在config/database.yml文件中,定义的独立的数据库,用来保持所有的日志信息。对Models的日志和对于用户行为操作的记录,被分为两类数据表 dimension和facts。鉴于效率和数据大小的考虑,项目中数据库没有进行更多的授权访问设置。在产品模式下,将会有严格的保护措施,以便不会误删数据。可是在开发模式,就有很多对应的开发和模拟数据方法,如下:
rake logging:clear # Deletes all logging-related records. (特别注意: prodution 模式不能执行) rake logging:dimension:mock THOUSANDS=2 # 创建 2,000 随机模拟日志数据 rake logging:geocode:all # Performs geocoding on the primary data, using caches where possible. rake logging:fact:all # Derives secondary data from primary data.
或者这时也可以通过一句命令实现以上操作
script/runner script/logging_mock
项目同样支持cron的定时操作,对特定时间区间进行日志操作,如下:
rake logging:fact:today rake logging:fact:yesterday rake logging:fact:range FROM='01/15/2007' TO='12/19/2008'
评论
2 楼
climber2002
2009-03-14
我觉得acl9很不错,它跟authlogic是绝配
1 楼
guodongbuding
2009-03-13
那个权限的插件太老了把 现在还有一个base_auth的插件 嘿嘿 我们做得那个是公司牛人写的!
发表评论
-
Destroying a Postgres DB on Heroku
2013-04-24 10:58 946heroku pg:reset DATABASE -
VIM ctags setup ack
2012-04-17 22:13 3265reference ctags --extra=+f --e ... -
alias_method_chain方法在3.1以后的替代使用方式
2012-02-04 02:14 3310alias_method_chain() 是rails里的一个 ... -
一些快速解决的问题
2012-01-19 12:35 1479问题如下: 引用Could not open library ... -
API service 安全问题
2011-12-04 08:47 1393这是一个长期关注的课题 rest api Service的 ... -
Module方法调用好不好
2011-11-20 01:58 1364以前说,用module给class加singleton方法,和 ... -
一个ajax和rails交互的例子
2011-11-19 01:53 1914首先,这里用了一个,query信息解析的包,如下 https: ... -
Rails 返回hash给javascript
2011-11-19 01:43 2282这是一个特别的,不太正统的需求, 因为,大部分时候,ajax的 ... -
关于Rubymine
2011-11-18 23:21 2279开个帖子收集有关使用上的问题 前一段时间,看到半价就买了。想 ... -
ruby中和javascript中,动态方法的创建
2011-11-18 21:01 1252class Klass def hello(*args) ... -
textmate快捷键 汇总
2011-11-16 07:20 8159TextMate 列编辑模式 按住 Alt 键,用鼠标选择要 ... -
Ruby面试系列六,面试继续面试
2011-11-15 05:55 2036刚才受到打击了,充分报漏了自己基础不扎实,不肯向虎炮等兄弟学习 ... -
说说sharding
2011-11-13 00:53 1511这个东西一面试就有人 ... -
rails面试碎碎念
2011-11-12 23:51 1956面试继续面试 又有问ru ... -
最通常的git push reject 和non-fast forward是因为
2011-11-12 23:29 17248git push To git@github.com:use ... -
Rails 自身的many to many关系 self has_many
2011-11-12 01:43 2748简单点的 #注意外键在person上people: id ... -
Rails 3下的 in place editor edit in place
2011-11-12 01:20 956第一个版本 http://code.google.com/p ... -
Heroku 的诡异问题集合
2011-11-11 07:22 1704开个Post记录,在用heroku过程中的一些诡异问题和要注意 ... -
SCSS 和 SASS 和 HAML 和CoffeeScript
2011-11-07 07:52 12971Asset Pipeline 提供了内建 ... -
Invalid gemspec because of the date format in specification
2011-11-07 02:14 2138又是这个date format的错误。 上次出错忘了,记录下 ...
相关推荐
题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...
本项目“Ruby-在一个简单的UI中管理您的RubyOnRails模型关系和迁移”旨在提供一个直观的用户界面,以便开发者能够更加方便地管理和操作Rails应用中的数据模型、关系和数据库迁移。 在Rails中,数据模型(Model)...
RubyonRails九日学习计划(含相关软件及书籍)时间 内容 目的 第一天 学习oracle 基本工具掌握 plsql ,sql语言,范式,索引,数据库安全,数据备份,导入导出。 熟练掌握SQL语言 第二天 1. ruby 语言历史和...
例如,客户端发出的第一个SYN报文在网络中滞留,后来在连接已建立的情况下才到达服务器,若不进行第三次握手,服务器会误认为是新连接请求并发送数据,导致资源浪费。 在实际网络环境中,网络分析工具如Sniffer Pro...
通过移动最小二乘法(MLS)对电厂历史数据进行拟合,筛选出典型工况,并利用三次样条插值法建立典型样本库,以简化燃烧调整实验。文章还详细介绍了 MLS 和三次样条插值法的数学原理,验证了该方法的有效性。 适合...
典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与...
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话: Message from Child l! Message from Child 2! 父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子...
所谓典型局域网就是指由一台具备三层交换功能的核心交换机接几台分支交换机。文中给出了三台分支交换机与核心交换机相连,并建立VLAN的实例。
把关键字、算符、界符称为语言固有...为此设置三个全程量:SYM,ID,NUM 。 SYM:存放每个单词的类别,为内部编码的表示形式。 ID:存放用户所定义的标识符的值,即标识符字符串的机内表示。 NUM:存放用户定义的数。
LTSpice 是一种广泛应用的电子电路仿真软件,在设计和分析 MOS 电路时,需要建立 MOS 模型。MOS 模型是指用于描述 MOSFET 的电气特性的数学模型。根据模型的复杂度和精度,可以将其分为一级、二级、三级模型等。 一...
Windows Server 2012 R2 提供了一种简单的方式来建立 FTP 服务器,以便用户可以远程访问和传输文件。 标题解释 Windows Server 2012 R2 服务器建立 FTP 访问,及无法与服务器建立连接相关问题解决 描述解释 该文档...
ArcGIS 三维建模的步骤包括 software 安装和配置、建立个人 Geodatabase、建模区域矢量化、 SketchUp 建立三维场景模型和 SketchUp 导出生成 Multipatch 等几个部分。只有严格按照这些步骤进行操作,才能成功地创建...
建立二叉树,实现二叉树的先序、中序、后序的递归遍历算法,输出遍历结果。 实现二叉树的先序、中序、后序和层次遍历的非递归算法,输出遍历结果。
在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程涉及到几个关键的概念和技术。 首先,我们要理解OpenGL ES中的坐标系。OpenGL ES采用右手坐标系,其中X轴正...
这个问题可能在访问某些网站、使用SSL/TLS连接或者进行数字签名操作时出现。以下将详细介绍如何通过导入证书来解决此类问题。 首先,我们需要了解证书链的工作原理。在公钥基础设施(PKI)中,每个证书都有一个签发...
三点定位算法是基于几何原理,通过至少三个已知参考点来确定未知目标位置的一种技术。在二维空间中,如果知道三个点的坐标,可以通过解三角形的方法找到第四点的位置;在三维空间中,同样利用三角原理,但需要解决的...
复现的985shuoshi论温,建立含系统能源运营商、含分布式光伏用户、电动汽车充电代理商的园区综合能源系统,分析三种市场交易主体的属性和市场交易机制。 建立三方市场主体各自综合能量管理优化运行方案,运用改进的...
•new:建立一个新的简单文件系统; •sfs:打开一个简单文件系统; •exit:退出打开的简单文件系统; •mkdir:创建子目录; •rmdir:删除子目录; •ls:显示目录; •cd:更改当前目录; •create:创建文件; ...