role_manager 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|