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 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,4 @@
1
+ class RoleManager::Assign < ActiveRecord::Base
2
+ set_table_name 'rolemanager_assigns'
3
+ belongs_to :role, :class_name => 'RoleManager::Role', :foreign_key => :role_id
4
+ end
@@ -0,0 +1,4 @@
1
+ class RoleManager::Authorization < ActiveRecord::Base
2
+ set_table_name 'rolemanager_authorizations'
3
+ belongs_to :role, :class_name => 'RoleManager::Role', :foreign_key => :role_id
4
+ end
@@ -0,0 +1,3 @@
1
+ class RoleManager::Function < ActiveRecord::Base
2
+ set_table_name 'rolemanager_functions'
3
+ end
@@ -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
@@ -0,0 +1,5 @@
1
+ module RoleManager
2
+ end
3
+
4
+ require 'extensions/action_controller/base'
5
+ require 'extensions/active_record/base'
@@ -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
+