- 浏览: 2075950 次
- 性别:
- 来自: 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 935heroku pg:reset DATABASE -
VIM ctags setup ack
2012-04-17 22:13 3259reference ctags --extra=+f --e ... -
alias_method_chain方法在3.1以后的替代使用方式
2012-02-04 02:14 3295alias_method_chain() 是rails里的一个 ... -
一些快速解决的问题
2012-01-19 12:35 1472问题如下: 引用Could not open library ... -
API service 安全问题
2011-12-04 08:47 1386这是一个长期关注的课题 rest api Service的 ... -
Module方法调用好不好
2011-11-20 01:58 1349以前说,用module给class加singleton方法,和 ... -
一个ajax和rails交互的例子
2011-11-19 01:53 1908首先,这里用了一个,query信息解析的包,如下 https: ... -
Rails 返回hash给javascript
2011-11-19 01:43 2277这是一个特别的,不太正统的需求, 因为,大部分时候,ajax的 ... -
关于Rubymine
2011-11-18 23:21 2267开个帖子收集有关使用上的问题 前一段时间,看到半价就买了。想 ... -
ruby中和javascript中,动态方法的创建
2011-11-18 21:01 1241class Klass def hello(*args) ... -
textmate快捷键 汇总
2011-11-16 07:20 8147TextMate 列编辑模式 按住 Alt 键,用鼠标选择要 ... -
Ruby面试系列六,面试继续面试
2011-11-15 05:55 2025刚才受到打击了,充分报漏了自己基础不扎实,不肯向虎炮等兄弟学习 ... -
说说sharding
2011-11-13 00:53 1492这个东西一面试就有人 ... -
rails面试碎碎念
2011-11-12 23:51 1946面试继续面试 又有问ru ... -
最通常的git push reject 和non-fast forward是因为
2011-11-12 23:29 17216git push To git@github.com:use ... -
Rails 自身的many to many关系 self has_many
2011-11-12 01:43 2738简单点的 #注意外键在person上people: id ... -
Rails 3下的 in place editor edit in place
2011-11-12 01:20 946第一个版本 http://code.google.com/p ... -
Heroku 的诡异问题集合
2011-11-11 07:22 1697开个Post记录,在用heroku过程中的一些诡异问题和要注意 ... -
SCSS 和 SASS 和 HAML 和CoffeeScript
2011-11-07 07:52 12960Asset Pipeline 提供了内建 ... -
Invalid gemspec because of the date format in specification
2011-11-07 02:14 2122又是这个date format的错误。 上次出错忘了,记录下 ...
相关推荐
题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...
在这个典型的局域网配置中,我们将探讨如何通过一台具备三层交换功能的核心交换机连接若干个分支交换机来实现这一目标。以下是实现这一配置的具体步骤和知识点: 1. **VTP (VLAN Trunking Protocol) 域设置**: ...
编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2 分别向管道各写一句话: Child1 is sending a message! Child2 is sending a message! 而父进程则从管道中读出来自于...
本项目“Ruby-在一个简单的UI中管理您的RubyOnRails模型关系和迁移”旨在提供一个直观的用户界面,以便开发者能够更加方便地管理和操作Rails应用中的数据模型、关系和数据库迁移。 在Rails中,数据模型(Model)...
例如,客户端发出的第一个SYN报文在网络中滞留,后来在连接已建立的情况下才到达服务器,若不进行第三次握手,服务器会误认为是新连接请求并发送数据,导致资源浪费。 在实际网络环境中,网络分析工具如Sniffer Pro...
通过移动最小二乘法(MLS)对电厂历史数据进行拟合,筛选出典型工况,并利用三次样条插值法建立典型样本库,以简化燃烧调整实验。文章还详细介绍了 MLS 和三次样条插值法的数学原理,验证了该方法的有效性。 适合...
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话: Message from Child l! Message from Child 2! 父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子...
所谓典型局域网就是指由一台具备三层交换功能的核心交换机接几台分支交换机。文中给出了三台分支交换机与核心交换机相连,并建立VLAN的实例。
一个具有车辆参数的三自由度模型首先被搭建,然后根据对Carsim输出的实时仿真数据进行扩展卡尔曼滤波数据处理,随后可以用于数据分析以及后续的运载模型建立,分析之后的数据平滑度较好matlab.zip
LTSpice 是一种广泛应用的电子电路仿真软件,在设计和分析 MOS 电路时,需要建立 MOS 模型。MOS 模型是指用于描述 MOSFET 的电气特性的数学模型。根据模型的复杂度和精度,可以将其分为一级、二级、三级模型等。 一...
总的来说,这个C# WinForm员工管理系统是一个很好的学习实例,它展示了如何使用三层架构来组织代码,以及如何通过C#和WinForm实现一个简单的数据库应用。通过实践这个项目,初学者可以更好地理解软件设计原则,为...
把关键字、算符、界符称为语言固有...为此设置三个全程量:SYM,ID,NUM 。 SYM:存放每个单词的类别,为内部编码的表示形式。 ID:存放用户所定义的标识符的值,即标识符字符串的机内表示。 NUM:存放用户定义的数。
线索二叉树是一种特殊的二叉树,它的每个结点都带有指向其前驱和后继结点的指针,这些指针称为线索。线索二叉树可以分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。在本文中,我们将讨论中序线索二叉树的...
该结构体包含三个成员:一个字符型变量 `data` 存储节点值,两个指向相同类型结构体的指针 `lchild` 和 `rchild` 分别表示节点的左子树和右子树。 ```cpp struct btnode { char data; // 节点数据 bitreptr ...
大连理工大学数据结构上机 二叉树三种遍历,先序和中序建立二叉树,后序和中序建立二叉树,二叉搜索树查找,删除,插入
Windows Server 2012 R2 提供了一种简单的方式来建立 FTP 服务器,以便用户可以远程访问和传输文件。 标题解释 Windows Server 2012 R2 服务器建立 FTP 访问,及无法与服务器建立连接相关问题解决 描述解释 该文档...
建立二叉树,实现二叉树的先序、中序、后序的递归遍历算法,输出遍历结果。 实现二叉树的先序、中序、后序和层次遍历的非递归算法,输出遍历结果。
在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程涉及到几个关键的概念和技术。 首先,我们要理解OpenGL ES中的坐标系。OpenGL ES采用右手坐标系,其中X轴正...
TCP(Transmission Control Protocol)是因特网中的传输层协议,使用三次握手协议建立连接。下面是 TCP 建立连接的全过程: TCP 连接建立过程 在 TCP 连接建立过程中,客户端(主机 A)和服务器端(主机 B)都处于...