我刚开始使用Ruby on Rails进行开发,我正在寻找一个动态授权插件,使管理员能够将角色和角色的权限与用户相关联。
我在stackoverflow和一些论坛上发现了一些帖子,还有一些针对这个主题的railscasts.org播客,但他们都引用了acl9,declarative_authorization,Aegis,restful acl甚至是Authlogic,这不是授权,而是认证插入。其他的不提供所需的功能。
有人可以告诉我是否可以使用ruby on rails设置Web界面来管理用户角色?
所以现在我使用以下迁移迁移了我的数据库。
class AddRolesAndRightsTables < ActiveRecord::Migration
def self.up
create_table :roles_users do |t|
t.integer :role_id
t.integer :user_id
end
create_table :roles do |t|
t.string :name
end
create_table :rights_roles do |t|
t.integer :right_id
t.integer :role_id
end
create_table :rights do |t|
t.string :name
t.string :controller
t.string :action
end
end
def self.down
drop_table :roles_users
drop_table :roles
drop_table :rights_roles
drop_table :rights
end
end
除了一些视图和控制器操作之外,我还向ApplicationController添加了以下操作。
def check_authorization
user = User.find(session[:user])
unless user.roles.detect do |role|
role.rights.select do |right|
right.action == action_name && right.controller == self.class.controller_path
end
end
redirect_back_or user
flash[:notice] = "You are not authorized to view the page you requested."
return false
end
运行Right.synchronize_with_controllers(参见Wolfman-Blog中的Blog-Post),我收到以下错误。
syntax error, unexpected $end, expecting kEND (line 17 in application_controller)
答案 0 :(得分:2)
我会建议Ryan Bate的cancan
。我花了一段时间才了解它是如何工作的,但是值得努力学习。
在我的完整程序中,我能够为所有控制器使用简单的load_and_authorize_resource
,并在此处添加额外的位以完成它。
希望authentication
和authorzation
之间没有混淆。如果您想快速建立管理界面,我建议 Active Admin 。
否则,使用cancan
和namespace
管理员控制器可能更灵活=)
<强>更新强>
要获得基于cancan的基于角色的简单权限接口,您可以在其中创建角色并为其分配权限。
User belongs_to Role
Role has_many Users
Role has_and_belongs_to_many Permissions
Permissions has_and_belongs_to_many Roles
每个Permission
记录定义一个模型以及您可以对其执行的RESTful操作。
如果您只需要定义一个角色,但其权限是静态的,我建议您可以将它们写入cancan中的Ability.rb
,然后取消Permission
模型。
抱歉,我无法提供确切的代码,因为我没有必要实现基于权限的模型。
Cancan Railscast http://railscasts.com/episodes/192-authorization-with-cancan
数据库中的能力:Cancan https://github.com/ryanb/cancan/wiki/Abilities-in-Database