anadea-identity 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +8 -48
- data/app/controllers/identity/omniauth_callbacks_controller.rb +1 -1
- data/app/models/identity/user.rb +2 -40
- data/config/routes.rb +4 -1
- data/{db/migrate/20150402142437_devise_create_identity_users.rb → lib/generators/identity/install_generator.rb} +18 -12
- data/lib/generators/identity/templates/identity.rb +3 -0
- data/lib/generators/identity/templates/migration.rb +16 -0
- data/lib/generators/identity/templates/migration_existing.rb +23 -0
- data/lib/identity.rb +8 -10
- data/lib/identity/admin/user.rb +2 -17
- data/lib/identity/engine.rb +10 -9
- data/lib/identity/mixins/user.rb +34 -0
- data/lib/identity/version.rb +1 -1
- metadata +6 -28
- data/app/controllers/identity/users_controller.rb +0 -58
- data/app/models/identity/role.rb +0 -16
- data/app/views/identity/users/edit.html.erb +0 -70
- data/app/views/identity/users/index.html.erb +0 -55
- data/db/migrate/20150402152859_rolify_create_identity_roles.rb +0 -19
- data/lib/tasks/whoami_tasks.rake +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5e7fe5d40f2bc8c0bd6bf9a41143d04b0b35eb1
|
4
|
+
data.tar.gz: 04c73a221ff0d77f1a327332e6fa0f616f7fa91c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b4d5997ca0d6ae09a0db56e31dd1ad0783a676f8ad836af5bb85e1b8c57a80aa2ad8cb4d189e31c6e102c454bfe8144f98ccbf0bcc160d9cfd8bdfe3277e3e8
|
7
|
+
data.tar.gz: 07e4e5ff7b1b8bd419c2b6736b11456d20b12f3e5b58c7545a0a44e693e7b1db2c35ddaf160e95ffda1315cd84ad611b86d2692f30479ecbb7837363a2a445c7
|
data/README.md
CHANGED
@@ -16,13 +16,13 @@ gem 'anadea-identity'
|
|
16
16
|
$ bundle
|
17
17
|
```
|
18
18
|
|
19
|
-
|
19
|
+
Запустите генератор:
|
20
20
|
|
21
21
|
```console
|
22
|
-
$
|
22
|
+
$ rails g identity:install User
|
23
23
|
```
|
24
24
|
|
25
|
-
проверьте
|
25
|
+
проверьте миграцию и запустите:
|
26
26
|
|
27
27
|
```console
|
28
28
|
$ rake db:migrate
|
@@ -39,36 +39,6 @@ $ rake db:migrate
|
|
39
39
|
У вас работает логин (через форму email/пароль), регистрация (через форму
|
40
40
|
email/пароль/подтверждение пароля), восстановление пароля и многое другое.
|
41
41
|
|
42
|
-
### Модель User
|
43
|
-
|
44
|
-
Вызов `current_user` в контроллере вернёт `Identity::User`, соответствующий
|
45
|
-
таблице `identity_users`. Не нужно добавлять в эту модель методы и не нужно
|
46
|
-
добавлять в эту таблицу колонки, кроме тех, которые используются Devise или
|
47
|
-
Identity. Эту модель следует считать публичным интерфейсом, предоставляеым гемом.
|
48
|
-
|
49
|
-
Рекомендуется заводить модели типа `Profile` или `Account` которые будут
|
50
|
-
"принадлежать" (`belong_to :user, class_name: "Identity::User"`) этой модели
|
51
|
-
и ссылаться на неё с помощью внешнего ключа.
|
52
|
-
|
53
|
-
### Авторизация
|
54
|
-
|
55
|
-
Модель `Identity::User` расширена ролями с помощью
|
56
|
-
[Rolify](https://github.com/RolifyCommunity/rolify). В частности, у вас есть
|
57
|
-
говорящие за себя методы:
|
58
|
-
|
59
|
-
```ruby
|
60
|
-
user.add_role :manager
|
61
|
-
user.remove_role :manager
|
62
|
-
user.has_role? :manager
|
63
|
-
|
64
|
-
Identity::User.with_role :manager
|
65
|
-
```
|
66
|
-
|
67
|
-
У вас есть многое другое – смотрите документацию Rolify.
|
68
|
-
|
69
|
-
Используйте эти методы в вызовах вашего авторизационного фреймворка, такого, как
|
70
|
-
[CanCanCan](https://github.com/CanCanCommunity/cancancan).
|
71
|
-
|
72
42
|
### Админка
|
73
43
|
|
74
44
|
Чтобы получить админку по пользователям, подключите
|
@@ -77,19 +47,13 @@ Identity::User.with_role :manager
|
|
77
47
|
|
78
48
|
### Конфигурация
|
79
49
|
|
80
|
-
|
81
|
-
|
82
|
-
```ruby
|
83
|
-
Identity.setup do |config|
|
84
|
-
config.devise_modules += [:confirmable]
|
85
|
-
# и много других конфигурационных опций
|
86
|
-
end
|
87
|
-
```
|
88
|
-
|
89
|
-
#### Доступные опции
|
50
|
+
Выполняется в `config/initializers/identity.rb`.
|
90
51
|
|
91
52
|
Вы всегда можете узнать полный список конфигурацинных опций и их значения по
|
92
|
-
умолчанию, ознакомившись [с исходным кодом](lib/identity.rb).
|
53
|
+
умолчанию, ознакомившись [с исходным кодом](lib/identity.rb). Важные опции:
|
54
|
+
|
55
|
+
* `config.user_class_name` – имя класса, который будет использоваться, как
|
56
|
+
основная модель для аутентификации. По умолчанию: `User`.
|
93
57
|
|
94
58
|
* `config.devise_modules` – модули Devise, которые вы используете. Например,
|
95
59
|
выключение `registerable` приведёт к невозможности зарегистрироваться, в том
|
@@ -117,10 +81,6 @@ end
|
|
117
81
|
* `config.auth_routes` – если задать `false`, маршруты подключены не будут и вы
|
118
82
|
можете сами подключить их.
|
119
83
|
|
120
|
-
* `config.admin_role` – "главная" роль в приложении. Роль, которой можно
|
121
|
-
управлять из предлаемой гемом админки, и роль, которая по умолчанию является
|
122
|
-
допуском в эту админку.
|
123
|
-
|
124
84
|
Вы также можете использовать любые конфигурационные опции самого Devise.
|
125
85
|
Они будут переданы Devise в точности. Например:
|
126
86
|
|
@@ -15,7 +15,7 @@ module Identity
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def omniauth_login(title)
|
18
|
-
@user = Identity
|
18
|
+
@user = Identity.user_class.from_omniauth!(request.env["omniauth.auth"])
|
19
19
|
|
20
20
|
set_flash_message(:notice, :success, :kind => title) if is_navigational_format?
|
21
21
|
sign_in_and_redirect @user, :event => :authentication
|
data/app/models/identity/user.rb
CHANGED
@@ -1,47 +1,9 @@
|
|
1
1
|
require "devise"
|
2
|
-
require "
|
3
|
-
require "kaminari"
|
2
|
+
require "identity/mixins/user"
|
4
3
|
|
5
4
|
module Identity
|
6
5
|
class User < ActiveRecord::Base
|
6
|
+
include Identity::Mixins::User
|
7
7
|
self.table_name = 'identity_users'
|
8
|
-
devise *Identity.devise_modules
|
9
|
-
|
10
|
-
if Devise.omniauth_providers.any?
|
11
|
-
devise :omniauthable, omniauth_providers: Devise.omniauth_providers
|
12
|
-
end
|
13
|
-
|
14
|
-
rolify role_cname: 'Identity::Role'
|
15
|
-
|
16
|
-
def self.from_omniauth!(auth)
|
17
|
-
where(provider: auth.provider, uid: auth.uid).first_or_create! do |user|
|
18
|
-
user.email = auth.provider == "twitter" ? "#{auth.info.nickname}_email@example.com" : auth.info.email
|
19
|
-
user.password = Devise.friendly_token[0,20]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
define_singleton_method Identity.admins_method do
|
24
|
-
with_role(Identity.admin_role)
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.find_first_by_auth_conditions(tainted_conditions, opts={active: true})
|
28
|
-
super
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.active
|
32
|
-
result = where(active: true)
|
33
|
-
result = result.where.not(confirmed_at: nil) if devise_modules.include?(:confirmable)
|
34
|
-
result
|
35
|
-
end
|
36
|
-
|
37
|
-
def role_names
|
38
|
-
roles.pluck(:name).sort.join(', ')
|
39
|
-
end
|
40
|
-
|
41
|
-
define_method Identity.admin_role do
|
42
|
-
has_role?(Identity.admin_role)
|
43
|
-
end
|
44
|
-
alias_method Identity.admin_predicate, Identity.admin_role
|
45
|
-
|
46
8
|
end
|
47
9
|
end
|
data/config/routes.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
if Identity.auth_routes
|
3
|
-
devise_for :users,
|
3
|
+
devise_for :users,
|
4
|
+
class_name: Identity.user_class_name,
|
5
|
+
module: :devise,
|
6
|
+
controllers: { omniauth_callbacks: "identity/omniauth_callbacks" }
|
4
7
|
end
|
5
8
|
end
|
@@ -1,6 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require "generators/active_record/devise_generator"
|
2
|
+
|
3
|
+
module Identity
|
4
|
+
class InstallGenerator < ActiveRecord::Generators::DeviseGenerator
|
5
|
+
source_root File.expand_path("../templates", __FILE__)
|
6
|
+
def config_file
|
7
|
+
template "identity.rb", "config/initializers/identity.rb"
|
8
|
+
end
|
9
|
+
|
10
|
+
def inject_devise_content
|
11
|
+
end
|
12
|
+
|
13
|
+
def migration_data
|
14
|
+
<<RUBY
|
4
15
|
# To enable/disable users from admin area
|
5
16
|
t.boolean :active, null: false, default: true
|
6
17
|
|
@@ -19,8 +30,8 @@ class DeviseCreateIdentityUsers < ActiveRecord::Migration
|
|
19
30
|
t.integer :sign_in_count, default: 0, null: false
|
20
31
|
t.datetime :current_sign_in_at
|
21
32
|
t.datetime :last_sign_in_at
|
22
|
-
t
|
23
|
-
t
|
33
|
+
t.#{ip_column} :current_sign_in_ip
|
34
|
+
t.#{ip_column} :last_sign_in_ip
|
24
35
|
|
25
36
|
## Confirmable
|
26
37
|
t.string :confirmation_token
|
@@ -31,12 +42,7 @@ class DeviseCreateIdentityUsers < ActiveRecord::Migration
|
|
31
42
|
## Omniauthable
|
32
43
|
t.string :provider
|
33
44
|
t.string :uid
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
add_index :identity_users, :email, unique: true
|
39
|
-
add_index :identity_users, :reset_password_token, unique: true
|
40
|
-
add_index :identity_users, :confirmation_token, unique: true
|
45
|
+
RUBY
|
46
|
+
end
|
41
47
|
end
|
42
48
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class DeviseCreate<%= table_name.camelize %> < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table(:<%= table_name %>) do |t|
|
4
|
+
<%= migration_data -%>
|
5
|
+
<% attributes.each do |attribute| -%>
|
6
|
+
t.<%= attribute.type %> :<%= attribute.name %>
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
t.timestamps null: false
|
10
|
+
end
|
11
|
+
add_index :<%= table_name %>, :email, unique: true
|
12
|
+
add_index :<%= table_name %>, :reset_password_token, unique: true
|
13
|
+
add_index :<%= table_name %>, :confirmation_token, unique: true
|
14
|
+
add_index :<%= table_name %>, [:provider, :uid], unique: true
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class AddDeviseTo<%= table_name.camelize %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
change_table(:<%= table_name %>) do |t|
|
4
|
+
<%= migration_data -%>
|
5
|
+
<% attributes.each do |attribute| -%>
|
6
|
+
t.<%= attribute.type %> :<%= attribute.name %>
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
# Uncomment below if timestamps were not included in your original model.
|
10
|
+
# t.timestamps null: false
|
11
|
+
end
|
12
|
+
add_index :<%= table_name %>, :email, unique: true
|
13
|
+
add_index :<%= table_name %>, :reset_password_token, unique: true
|
14
|
+
add_index :<%= table_name %>, :confirmation_token, unique: true
|
15
|
+
add_index :<%= table_name %>, [:provider, :uid], unique: true
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.down
|
19
|
+
# By default, we don't want to make any assumption about how to roll back a migration when your
|
20
|
+
# model already existed. Please edit below which fields you would like to remove in this migration.
|
21
|
+
raise ActiveRecord::IrreversibleMigration
|
22
|
+
end
|
23
|
+
end
|
data/lib/identity.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require "
|
2
|
-
|
1
|
+
require "devise"
|
3
2
|
|
4
3
|
module Identity
|
5
4
|
mattr_accessor :devise_modules do
|
@@ -13,17 +12,12 @@ module Identity
|
|
13
12
|
]
|
14
13
|
end
|
15
14
|
|
15
|
+
mattr_accessor(:user_class_name) { "::User" }
|
16
16
|
mattr_accessor(:layout) { 'application' }
|
17
17
|
mattr_accessor(:auth_routes) { true }
|
18
|
-
mattr_accessor(:admin_namespace) { :identity }
|
19
|
-
mattr_accessor(:admin_role) { :admin }
|
20
|
-
|
21
|
-
def self.admins_method
|
22
|
-
:"#{admin_role.to_s.pluralize}"
|
23
|
-
end
|
24
18
|
|
25
|
-
def self.
|
26
|
-
|
19
|
+
def self.user_class
|
20
|
+
user_class_name.constantize
|
27
21
|
end
|
28
22
|
|
29
23
|
def self.setup
|
@@ -48,3 +42,7 @@ module Identity
|
|
48
42
|
end
|
49
43
|
|
50
44
|
end
|
45
|
+
|
46
|
+
unless caller.find {|s| s.end_with?("`generate_or_destroy'")}
|
47
|
+
require "identity/engine"
|
48
|
+
end
|
data/lib/identity/admin/user.rb
CHANGED
@@ -1,28 +1,20 @@
|
|
1
1
|
if defined?(ActiveAdmin)
|
2
|
-
ActiveAdmin.register Identity
|
3
|
-
permit_params :email, :password, :password_confirmation
|
2
|
+
ActiveAdmin.register Identity.user_class, as: "Users" do
|
3
|
+
permit_params :email, :password, :password_confirmation
|
4
4
|
|
5
5
|
filter :email
|
6
6
|
filter :active
|
7
|
-
filter :roles
|
8
7
|
filter :current_sign_in_at
|
9
8
|
filter :created_at
|
10
9
|
|
11
10
|
scope :all
|
12
11
|
scope :active, default: true
|
13
|
-
scope Identity.admins_method
|
14
12
|
|
15
13
|
index do
|
16
14
|
selectable_column
|
17
15
|
id_column
|
18
16
|
column :active
|
19
|
-
column Identity.admin_role do |user|
|
20
|
-
status_tag user.send(Identity.admin_role) ? 'yes' : 'no'
|
21
|
-
end
|
22
17
|
column :email
|
23
|
-
column :roles do |user|
|
24
|
-
user.role_names
|
25
|
-
end
|
26
18
|
if Devise.mappings[:user].confirmable?
|
27
19
|
column :confirmed do |user|
|
28
20
|
status_tag user.confirmed_at ? 'yes' : 'no'
|
@@ -42,13 +34,7 @@ if defined?(ActiveAdmin)
|
|
42
34
|
row :active do |user|
|
43
35
|
status_tag user.active? ? 'yes' : 'no'
|
44
36
|
end
|
45
|
-
row Identity.admin_role do |user|
|
46
|
-
status_tag user.send(Identity.admin_role) ? 'yes' : 'no'
|
47
|
-
end
|
48
37
|
row :email
|
49
|
-
row :roles do |user|
|
50
|
-
user.role_names
|
51
|
-
end
|
52
38
|
if Devise.mappings[:user].trackable?
|
53
39
|
row :sign_in_count
|
54
40
|
row :current_sign_in_ip
|
@@ -71,7 +57,6 @@ if defined?(ActiveAdmin)
|
|
71
57
|
input :email
|
72
58
|
input :password
|
73
59
|
input :password_confirmation
|
74
|
-
input :roles, as: :check_boxes
|
75
60
|
end
|
76
61
|
f.actions
|
77
62
|
end
|
data/lib/identity/engine.rb
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
require "devise"
|
2
|
+
require "identity/mixins/user"
|
2
3
|
require_relative "./devise_config"
|
3
|
-
|
4
|
-
require "rolify"
|
5
|
-
|
6
4
|
require_relative "./view_helper"
|
7
5
|
|
8
|
-
require "kaminari"
|
9
|
-
Kaminari::Hooks.init
|
10
|
-
|
11
6
|
module Identity
|
12
7
|
class Engine < ::Rails::Engine
|
13
|
-
initializer
|
8
|
+
initializer "identity-views" do |app|
|
14
9
|
ActionView::Base.include Identity::ViewHelper
|
15
10
|
end
|
16
11
|
|
17
|
-
initializer
|
18
|
-
ActiveAdmin.application.load_paths.unshift(File.dirname(__FILE__) +
|
12
|
+
initializer "identity-admin" do |app|
|
13
|
+
ActiveAdmin.application.load_paths.unshift(File.dirname(__FILE__) + "/admin")
|
14
|
+
end
|
15
|
+
|
16
|
+
initializer "identity-model" do
|
17
|
+
unless Identity.user_class.is_a?(Identity::Mixins::User)
|
18
|
+
Identity.user_class.include(Identity::Mixins::User)
|
19
|
+
end
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Identity
|
2
|
+
module Mixins
|
3
|
+
module User
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
devise *Identity.devise_modules
|
8
|
+
|
9
|
+
if Devise.omniauth_providers.any?
|
10
|
+
devise :omniauthable, omniauth_providers: Devise.omniauth_providers
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
def from_omniauth!(auth)
|
16
|
+
where(provider: auth.provider, uid: auth.uid).first_or_create! do |user|
|
17
|
+
user.email = auth.provider == "twitter" ? "#{auth.info.nickname}_email@example.com" : auth.info.email
|
18
|
+
user.password = Devise.friendly_token[0,20]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_first_by_auth_conditions(tainted_conditions, opts={active: true})
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
def active
|
27
|
+
result = where(active: true)
|
28
|
+
result = result.where.not(confirmed_at: nil) if devise_modules.include?(:confirmable)
|
29
|
+
result
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/identity/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anadea-identity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anadea team
|
@@ -50,26 +50,6 @@ dependencies:
|
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '4'
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: rolify
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: 4.0.0
|
60
|
-
- - "<"
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '5'
|
63
|
-
type: :runtime
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 4.0.0
|
70
|
-
- - "<"
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: '5'
|
73
53
|
description: An authentication bootstrapper for your Rails application.
|
74
54
|
email:
|
75
55
|
- dmitriy.kiriyenko@anahoret.com
|
@@ -85,8 +65,6 @@ files:
|
|
85
65
|
- app/assets/images/twitter.png
|
86
66
|
- app/controllers/identity/base_controller.rb
|
87
67
|
- app/controllers/identity/omniauth_callbacks_controller.rb
|
88
|
-
- app/controllers/identity/users_controller.rb
|
89
|
-
- app/models/identity/role.rb
|
90
68
|
- app/models/identity/user.rb
|
91
69
|
- app/views/devise/confirmations/new.html.erb
|
92
70
|
- app/views/devise/mailer/confirmation_instructions.html.erb
|
@@ -99,8 +77,6 @@ files:
|
|
99
77
|
- app/views/devise/sessions/new.html.erb
|
100
78
|
- app/views/devise/shared/_links.erb
|
101
79
|
- app/views/devise/unlocks/new.html.erb
|
102
|
-
- app/views/identity/users/edit.html.erb
|
103
|
-
- app/views/identity/users/index.html.erb
|
104
80
|
- config/locales/ca.yml
|
105
81
|
- config/locales/de.yml
|
106
82
|
- config/locales/en.yml
|
@@ -118,18 +94,20 @@ files:
|
|
118
94
|
- config/locales/zh-CN.yml
|
119
95
|
- config/locales/zh-TW.yml
|
120
96
|
- config/routes.rb
|
121
|
-
- db/migrate/20150402142437_devise_create_identity_users.rb
|
122
|
-
- db/migrate/20150402152859_rolify_create_identity_roles.rb
|
123
97
|
- lib/anadea/identity.rb
|
98
|
+
- lib/generators/identity/install_generator.rb
|
124
99
|
- lib/generators/identity/locales_generator.rb
|
100
|
+
- lib/generators/identity/templates/identity.rb
|
101
|
+
- lib/generators/identity/templates/migration.rb
|
102
|
+
- lib/generators/identity/templates/migration_existing.rb
|
125
103
|
- lib/generators/identity/views_generator.rb
|
126
104
|
- lib/identity.rb
|
127
105
|
- lib/identity/admin/user.rb
|
128
106
|
- lib/identity/devise_config.rb
|
129
107
|
- lib/identity/engine.rb
|
108
|
+
- lib/identity/mixins/user.rb
|
130
109
|
- lib/identity/version.rb
|
131
110
|
- lib/identity/view_helper.rb
|
132
|
-
- lib/tasks/whoami_tasks.rake
|
133
111
|
homepage: https://github.com/Anadea/identity
|
134
112
|
licenses:
|
135
113
|
- MIT
|
@@ -1,58 +0,0 @@
|
|
1
|
-
module Identity
|
2
|
-
class UsersController < ActionController::Base
|
3
|
-
layout Identity.admin_layout
|
4
|
-
before_action :ensure_allowed!
|
5
|
-
helper_method :resource, :resources
|
6
|
-
|
7
|
-
def index
|
8
|
-
@resources = User.search_and_order(params[:search], params[:page])
|
9
|
-
end
|
10
|
-
|
11
|
-
def show
|
12
|
-
redirect_to edit_identity_user_path(params[:id])
|
13
|
-
end
|
14
|
-
|
15
|
-
def edit
|
16
|
-
@resource = find_user
|
17
|
-
end
|
18
|
-
|
19
|
-
def update
|
20
|
-
@resource = find_user
|
21
|
-
if @resource.admin_update(user_params, current?(@resource))
|
22
|
-
@resource.skip_reconfirmation! if @resource.respond_to?(:skip_reconfirmation!)
|
23
|
-
@resource.save
|
24
|
-
redirect_to [Identity.admin_namespace, :users], notice: "#{@resource.email} updated."
|
25
|
-
else
|
26
|
-
render :edit
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
attr_reader :resource, :resources
|
33
|
-
|
34
|
-
def ensure_allowed!
|
35
|
-
unless Identity.admin_guard[current_user, self]
|
36
|
-
raise ActionController::RoutingError.new('Nothing here, move around')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def devise_mapping
|
41
|
-
request.env["devise.mapping"]
|
42
|
-
end
|
43
|
-
|
44
|
-
def current?(user)
|
45
|
-
user.id == current_user.id
|
46
|
-
end
|
47
|
-
|
48
|
-
def find_user
|
49
|
-
User.find params[:id]
|
50
|
-
end
|
51
|
-
|
52
|
-
def user_params
|
53
|
-
params.require(:identity_user).permit(
|
54
|
-
:email, :password, :password_confirmation, :active, Identity.admin_role
|
55
|
-
)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
data/app/models/identity/role.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require "rolify"
|
2
|
-
|
3
|
-
module Identity
|
4
|
-
class Role < ActiveRecord::Base
|
5
|
-
self.table_name = 'identity_roles'
|
6
|
-
|
7
|
-
has_and_belongs_to_many :users, :join_table => :identity_users_identity_roles
|
8
|
-
belongs_to :resource, :polymorphic => true
|
9
|
-
|
10
|
-
validates :resource_type,
|
11
|
-
:inclusion => { :in => Rolify.resource_types },
|
12
|
-
:allow_nil => true
|
13
|
-
|
14
|
-
scopify
|
15
|
-
end
|
16
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
<%= content_for(:title) { "Identity: Edit User #{resource.email}" } %>
|
2
|
-
|
3
|
-
<%= bootstrap_devise_error_messages! %>
|
4
|
-
<div class="row">
|
5
|
-
<div class="col-sm-6">
|
6
|
-
<h1>
|
7
|
-
Edit User <small><%= "#{resource.email} - id: #{resource.id}" %></small>
|
8
|
-
</h1>
|
9
|
-
<p><%= link_to "Back to Users", [Identity.admin_namespace, :users] %></p>
|
10
|
-
|
11
|
-
<%= form_for resource,
|
12
|
-
url: send("#{Identity.admin_namespace}_user_path", resource),
|
13
|
-
method: :patch,
|
14
|
-
html: { role: "form" } do |f| %>
|
15
|
-
|
16
|
-
<div class="form-group">
|
17
|
-
<%= f.label :email %>
|
18
|
-
<div class="row">
|
19
|
-
<div class="col-sm-6">
|
20
|
-
<%= f.email_field :email, class: "form-control" %>
|
21
|
-
</div>
|
22
|
-
</div>
|
23
|
-
</div>
|
24
|
-
|
25
|
-
<div class="form-group">
|
26
|
-
<%= f.label :password %>
|
27
|
-
<div class="row">
|
28
|
-
<div class="col-sm-6">
|
29
|
-
<%= f.password_field :password, class: "form-control" %>
|
30
|
-
</div>
|
31
|
-
</div>
|
32
|
-
</div>
|
33
|
-
|
34
|
-
<div class="form-group">
|
35
|
-
<%= f.label :password_confirmation %>
|
36
|
-
<div class="row">
|
37
|
-
<div class="col-sm-6">
|
38
|
-
<%= f.password_field :password_confirmation, class: "form-control" %>
|
39
|
-
</div>
|
40
|
-
</div>
|
41
|
-
</div>
|
42
|
-
|
43
|
-
<% unless current_user.id == resource.id %>
|
44
|
-
<div class="form-group">
|
45
|
-
<div class="row">
|
46
|
-
<div class="col-sm-6">
|
47
|
-
<%= f.check_box :active %> <%= f.label :active, "Is active?" %>
|
48
|
-
</div>
|
49
|
-
</div>
|
50
|
-
</div>
|
51
|
-
|
52
|
-
<div class="form-group">
|
53
|
-
<div class="row">
|
54
|
-
<div class="col-sm-6">
|
55
|
-
<%= f.check_box Identity.admin_role %> <%= f.label Identity.admin_role, "Is #{Identity.admin_role}?" %>
|
56
|
-
</div>
|
57
|
-
</div>
|
58
|
-
</div>
|
59
|
-
<% end %>
|
60
|
-
|
61
|
-
<div class="row">
|
62
|
-
<div class="col-sm-6">
|
63
|
-
<%= f.submit "Update User", class: "btn btn-danger" %>
|
64
|
-
</div>
|
65
|
-
</div>
|
66
|
-
|
67
|
-
<% end %>
|
68
|
-
|
69
|
-
</div>
|
70
|
-
</div>
|
@@ -1,55 +0,0 @@
|
|
1
|
-
<%= content_for(:title) { "Identity: Users Admin" } %>
|
2
|
-
|
3
|
-
<h1>Users <small>Admin</small></h1>
|
4
|
-
<p><%= link_to "Back to Application", '/' %></p>
|
5
|
-
|
6
|
-
<div class="text-center">
|
7
|
-
<p><%= page_entries_info resources %></p>
|
8
|
-
<%= paginate resources %>
|
9
|
-
</div>
|
10
|
-
|
11
|
-
<%= form_tag [Identity.admin_namespace, :users], method: 'get', html: {role: "form"} do %>
|
12
|
-
<p>
|
13
|
-
<%= text_field_tag :search, params[:search] %>
|
14
|
-
<%= submit_tag "Search", :name => nil, class: "btn btn-sm btn-primary" %>
|
15
|
-
<%= link_to "All", [Identity.admin_namespace, :users], {class: "btn btn-sm btn-link"} %>
|
16
|
-
</p>
|
17
|
-
<% end %>
|
18
|
-
|
19
|
-
<table class="table table-striped">
|
20
|
-
<tr>
|
21
|
-
<th>User ID</th>
|
22
|
-
<th>Email</th>
|
23
|
-
<th><%= Identity.admins_method %></th>
|
24
|
-
<th>Active</th>
|
25
|
-
<th>Sign In Count</th>
|
26
|
-
<th>Created At</th>
|
27
|
-
<th>Last Sign In</th>
|
28
|
-
<th>Last Sign In IP</th>
|
29
|
-
</tr>
|
30
|
-
|
31
|
-
<% resources.each do |user| %>
|
32
|
-
|
33
|
-
<tr>
|
34
|
-
<td><%= user.id %></td>
|
35
|
-
<td><%= link_to user.email, send("#{Identity.admin_namespace}_user_path", user) %></td>
|
36
|
-
<td><%= user.send(Identity.admin_predicate) ? "<b>yes</b>".html_safe : "no" %></td>
|
37
|
-
<td><%= user.active? ? "<b>yes</b>".html_safe : "no" %></td>
|
38
|
-
<td><%= user.sign_in_count %></td>
|
39
|
-
<td><%= time_ago_in_words(user.created_at) %></td>
|
40
|
-
<% unless user.last_sign_in_at.nil? %>
|
41
|
-
<td><%= time_ago_in_words(user.last_sign_in_at)%> ago</td>
|
42
|
-
<% else %>
|
43
|
-
<td>never</td>
|
44
|
-
<% end %>
|
45
|
-
<td><%= user.last_sign_in_ip %></td>
|
46
|
-
</tr>
|
47
|
-
|
48
|
-
<% end %>
|
49
|
-
|
50
|
-
</table>
|
51
|
-
|
52
|
-
<div class="text-center">
|
53
|
-
<p><%= page_entries_info resources %></p>
|
54
|
-
<%= paginate resources %>
|
55
|
-
</div>
|
@@ -1,19 +0,0 @@
|
|
1
|
-
class RolifyCreateIdentityRoles < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table(:identity_roles) do |t|
|
4
|
-
t.string :name
|
5
|
-
t.references :resource, :polymorphic => true
|
6
|
-
|
7
|
-
t.timestamps null: true
|
8
|
-
end
|
9
|
-
|
10
|
-
create_table(:identity_users_identity_roles, :id => false) do |t|
|
11
|
-
t.references :user
|
12
|
-
t.references :role
|
13
|
-
end
|
14
|
-
|
15
|
-
add_index(:identity_roles, :name)
|
16
|
-
add_index(:identity_roles, [ :name, :resource_type, :resource_id ])
|
17
|
-
add_index(:identity_users_identity_roles, [ :user_id, :role_id ])
|
18
|
-
end
|
19
|
-
end
|
data/lib/tasks/whoami_tasks.rake
DELETED