role_manager 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +31 -0
- data/VERSION +1 -0
- data/app/models/role_manager/assign.rb +4 -0
- data/app/models/role_manager/authorization.rb +4 -0
- data/app/models/role_manager/function.rb +3 -0
- data/app/models/role_manager/role.rb +10 -0
- data/init.rb +1 -0
- data/lib/extensions/action_controller/base.rb +19 -0
- data/lib/extensions/active_record/base.rb +7 -0
- data/lib/generators/role_manager/install/install_generator.rb +26 -0
- data/lib/generators/role_manager/install/templates/migration.rb +29 -0
- data/lib/role_manager.rb +5 -0
- data/lib/role_manager_methods.rb +18 -0
- metadata +90 -0
data/README
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
Usage
|
2
|
+
=====
|
3
|
+
要 ActionController#current_user
|
4
|
+
|
5
|
+
rails g role_manager:install user
|
6
|
+
rake db:migrate
|
7
|
+
|
8
|
+
Example
|
9
|
+
=======
|
10
|
+
|
11
|
+
class User < ActiveRecord::Base
|
12
|
+
acts_as_role
|
13
|
+
include RoleMangerMethods
|
14
|
+
end
|
15
|
+
|
16
|
+
user = User.new
|
17
|
+
user.has_authority? :register #=> true/false
|
18
|
+
|
19
|
+
class FooController < ActionController::Base
|
20
|
+
role_filter :destroy #=> 全アクション
|
21
|
+
role_filter :register, :only => 'index' #=> indexアクションのみ
|
22
|
+
end
|
23
|
+
|
24
|
+
# Roleに対してFuncの権限を与える
|
25
|
+
r = RoleManager::Role.first
|
26
|
+
r.add_authority RoleManager::Function.first.code
|
27
|
+
r.save
|
28
|
+
|
29
|
+
# UserにRoleを与える
|
30
|
+
u.role = r
|
31
|
+
u.save
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.0
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class RoleManager::Role < ActiveRecord::Base
|
2
|
+
set_table_name 'rolemanager_roles'
|
3
|
+
has_many :authorizations, :class_name => 'RoleManager::Authorization', :foreign_key => :role_id
|
4
|
+
has_many :assigns, :class_name => 'RoleManager::Assign', :foreign_key => :role_id
|
5
|
+
|
6
|
+
def add_authority(func)
|
7
|
+
raise ArgumentError,'not found this func' if RoleManager::Function.first(:conditions => ['code = ?', func]).blank?
|
8
|
+
RoleManager::Authorization.create(:role_id => self.id, :function_code => func.to_s)
|
9
|
+
end
|
10
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'role_manager'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class ActionController::Base
|
2
|
+
def current_user
|
3
|
+
raise NotImplementedError
|
4
|
+
end
|
5
|
+
|
6
|
+
def has_authority?(func)
|
7
|
+
session[:functions] ||= current_user.rolemanager_funcs
|
8
|
+
session[:functions].include? func.to_s
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.role_filter(func,options={})
|
12
|
+
before_filter options do |controller|
|
13
|
+
unless controller.send(:current_user).has_authority?(func)
|
14
|
+
raise PermissionError
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
class PermissionError < StandardError; end;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class ActiveRecord::Base
|
2
|
+
def self.acts_as_role
|
3
|
+
has_many :assigns, :class_name => 'RoleManager::Assign', :foreign_key => "#{self.superclass.to_s.downcase}_id"
|
4
|
+
has_many :roles, :class_name => 'RoleManager::Role', :through => :assigns
|
5
|
+
include RoleManagerMethods
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
module RoleManager
|
5
|
+
module Generators
|
6
|
+
class InstallGenerator < Rails::Generators::NamedBase
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
|
9
|
+
def self.source_root
|
10
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.next_migration_number(dirname)
|
14
|
+
if ActiveRecord::Base.timestamped_migrations
|
15
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
16
|
+
else
|
17
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_migration_file
|
22
|
+
migration_template 'migration.rb', 'db/migrate/create_role_manager_tables.rb'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class CreateRoleManagerTables < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :rolemanager_roles do |t|
|
4
|
+
t.string :name, :null => false
|
5
|
+
t.timestamps
|
6
|
+
end
|
7
|
+
create_table :rolemanager_authorizations do |t|
|
8
|
+
t.integer :role_id, :null => false
|
9
|
+
t.string :function_code, :null => false
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
create_table :rolemanager_functions do |t|
|
13
|
+
t.string :name, :null => false
|
14
|
+
t.string :code, :null => false
|
15
|
+
t.timestamps
|
16
|
+
end
|
17
|
+
create_table :rolemanager_assigns do |t|
|
18
|
+
t.integer "<%= file_name %>_id", :null => false
|
19
|
+
t.integer :role_id, :null => false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.down
|
24
|
+
drop_table :rolemanager_roles
|
25
|
+
drop_table :rolemanager_authorizations
|
26
|
+
drop_table :rolemanager_functions
|
27
|
+
drop_table :rolemanager_assigns
|
28
|
+
end
|
29
|
+
end
|
data/lib/role_manager.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module RoleManagerMethods
|
2
|
+
def has_authority?(func)
|
3
|
+
rolemanager_funcs.include?(func.to_s)
|
4
|
+
end
|
5
|
+
|
6
|
+
def rolemanager_funcs
|
7
|
+
@rolemanager_funcs ||= RoleManager::Authorization.find_by_sql("select distinct function_code from rolemanager_authorizations auth, rolemanager_assigns assigns where assigns.role_id = auth.role_id and assigns.user_id = #{self.id}").map(&:function_code)
|
8
|
+
end
|
9
|
+
|
10
|
+
def change_role(role)
|
11
|
+
return unless role
|
12
|
+
@rolemanager_funcs = RoleManager::Authorization.find_by_sql("select function_code from rolemanager_authorizations auth where auth.role_id = #{role.id}").map(&:function_code)
|
13
|
+
end
|
14
|
+
|
15
|
+
def flash_auth_funcs
|
16
|
+
@rolemanager_funcs = nil
|
17
|
+
end
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: role_manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 0.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- AKAMATSU Yuki
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-10-22 00:00:00 +09:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 2
|
30
|
+
- 0
|
31
|
+
- 0
|
32
|
+
version: 2.0.0
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
35
|
+
description: "\xE6\xA8\xA9\xE9\x99\x90\xE7\xAE\xA1\xE7\x90\x86\xE3\x83\xA2\xE3\x82\xB8\xE3\x83\xA5\xE3\x83\xBC\xE3\x83\xAB"
|
36
|
+
email: ""
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- README
|
43
|
+
files:
|
44
|
+
- README
|
45
|
+
- VERSION
|
46
|
+
- app/models/role_manager/assign.rb
|
47
|
+
- app/models/role_manager/authorization.rb
|
48
|
+
- app/models/role_manager/function.rb
|
49
|
+
- app/models/role_manager/role.rb
|
50
|
+
- init.rb
|
51
|
+
- lib/extensions/action_controller/base.rb
|
52
|
+
- lib/extensions/active_record/base.rb
|
53
|
+
- lib/generators/role_manager/install/install_generator.rb
|
54
|
+
- lib/generators/role_manager/install/templates/migration.rb
|
55
|
+
- lib/role_manager.rb
|
56
|
+
- lib/role_manager_methods.rb
|
57
|
+
has_rdoc: true
|
58
|
+
homepage: ""
|
59
|
+
licenses: []
|
60
|
+
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options:
|
63
|
+
- --charset=UTF-8
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
82
|
+
requirements: []
|
83
|
+
|
84
|
+
rubyforge_project:
|
85
|
+
rubygems_version: 1.3.7
|
86
|
+
signing_key:
|
87
|
+
specification_version: 3
|
88
|
+
summary: "\xE6\xA8\xA9\xE9\x99\x90\xE7\xAE\xA1\xE7\x90\x86\xE3\x83\xA2\xE3\x82\xB8\xE3\x83\xA5\xE3\x83\xBC\xE3\x83\xAB"
|
89
|
+
test_files: []
|
90
|
+
|