You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by mi...@apache.org on 2017/05/24 02:40:09 UTC
[04/14] incubator-trafficcontrol git commit: Authorization model -
Adding tables: capability (list of available capabilities),
api_capability mapping,
role_capability mapping & user_role. Seeding capability & api_capability
tables. Also seeding root role
Authorization model -
Adding tables: capability (list of available capabilities), api_capability mapping, role_capability mapping & user_role.
Seeding capability & api_capability tables. Also seeding root role.
(cherry picked from commit 4879a2c1138a37786df2fe8652edae3592a4bd12)
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/5392f500
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/5392f500
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/5392f500
Branch: refs/heads/master
Commit: 5392f5004b7ac6b028c417c2ec1bdb306c5607ab
Parents: ef05b19
Author: naamashoresh <na...@qwilt.com>
Authored: Thu May 4 10:26:17 2017 +0300
Committer: Jeremy Mitchell <mi...@gmail.com>
Committed: Tue May 23 20:39:02 2017 -0600
----------------------------------------------------------------------
...0406000001_create_capabilities_and_roles.sql | 89 +++++++
traffic_ops/app/db/seeds.sql | 252 ++++++++++++++++++-
.../app/lib/Schema/Result/ApiCapability.pm | 124 +++++++++
traffic_ops/app/lib/Schema/Result/Capability.pm | 109 ++++++++
.../app/lib/Schema/Result/RoleCapability.pm | 99 ++++++++
traffic_ops/app/lib/Schema/Result/UserRole.pm | 99 ++++++++
6 files changed, 771 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/5392f500/traffic_ops/app/db/migrations/20170406000001_create_capabilities_and_roles.sql
----------------------------------------------------------------------
diff --git a/traffic_ops/app/db/migrations/20170406000001_create_capabilities_and_roles.sql b/traffic_ops/app/db/migrations/20170406000001_create_capabilities_and_roles.sql
new file mode 100644
index 0000000..23b730b
--- /dev/null
+++ b/traffic_ops/app/db/migrations/20170406000001_create_capabilities_and_roles.sql
@@ -0,0 +1,89 @@
+/*
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+-- +goose Up
+-- SQL in section 'Up' is executed when this migration is applied
+
+
+-- capability
+CREATE TABLE capability (
+ name text primary key UNIQUE NOT NULL,
+ description text,
+ last_updated timestamp with time zone DEFAULT now()
+);
+
+CREATE TRIGGER on_update_current_timestamp BEFORE UPDATE ON capability FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated();
+
+-- http_method_t (enum)
+CREATE TYPE http_method_t as ENUM ('GET', 'POST', 'PUT', 'PATCH', 'DELETE');
+
+-- api_capability
+
+CREATE TABLE api_capability (
+ id BIGSERIAL primary key NOT NULL,
+ http_method http_method_t NOT NULL,
+ route text NOT NULL,
+ capability text NOT NULL,
+ CONSTRAINT fk_capability FOREIGN KEY (capability) REFERENCES capability(name) ON DELETE RESTRICT,
+ last_updated timestamp with time zone DEFAULT now()
+);
+
+CREATE TRIGGER on_update_current_timestamp BEFORE UPDATE ON api_capability FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated();
+
+-- role_capability
+CREATE TABLE role_capability (
+ role_id bigint NOT NULL,
+ CONSTRAINT fk_role_id FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE,
+ cap_name text NOT NULL,
+ CONSTRAINT fk_cap_name FOREIGN KEY (cap_name) REFERENCES capability(name) ON DELETE RESTRICT,
+ last_updated timestamp with time zone DEFAULT now()
+);
+
+CREATE TRIGGER on_update_current_timestamp BEFORE UPDATE ON role_capability FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated();
+
+-- user_role
+CREATE TABLE user_role (
+ user_id bigint NOT NULL,
+ CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES tm_user(id) ON DELETE CASCADE,
+ role_id bigint NOT NULL,
+ CONSTRAINT fk_role_id FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE RESTRICT,
+ last_updated timestamp with time zone DEFAULT now()
+);
+
+CREATE TRIGGER on_update_current_timestamp BEFORE UPDATE ON user_role FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated();
+
+
+-- +goose Down
+-- SQL section 'Down' is executed when this migration is rolled back
+
+
+DROP TRIGGER on_update_current_timestamp ON user_role;
+
+DROP TABLE user_role;
+
+DROP TRIGGER on_update_current_timestamp ON role_capability;
+
+DROP TABLE role_capability;
+
+DROP TRIGGER on_update_current_timestamp ON api_capability;
+
+DROP TABLE api_capability;
+
+DROP TRIGGER on_update_current_timestamp ON capability;
+
+DROP TABLE capability;
+
+
+
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/5392f500/traffic_ops/app/db/seeds.sql
----------------------------------------------------------------------
diff --git a/traffic_ops/app/db/seeds.sql b/traffic_ops/app/db/seeds.sql
index 8e725a1..f372c20 100644
--- a/traffic_ops/app/db/seeds.sql
+++ b/traffic_ops/app/db/seeds.sql
@@ -1,4 +1,4 @@
-/*
+-- -- -- -- -- -- -- /*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -69,10 +69,260 @@ insert into role (name, description, priv_level) values ('steering', 'Role for S
insert into role (name, description, priv_level) values ('read-only user', 'Read-Only user', 10) ON CONFLICT (name) DO NOTHING;
insert into role (name, description, priv_level) values ('portal', 'Portal User', 2) ON CONFLICT (name) DO NOTHING;
insert into role (name, description, priv_level) values ('disallowed', 'Block all access', 0) ON CONFLICT (name) DO NOTHING;
+insert into role (name, description, priv_level) values ('root', 'Role for full capabilities - super-user ', 30) ON CONFLICT DO NOTHING;
-- tenants
insert into tenant (name, active, parent_id) values ('root', true, null) ON CONFLICT DO NOTHING;
+-- capabilities
+insert into capability (name, description) values ('all-read', 'Full read access') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('all-write', 'Full write access') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('asn-read', 'View ASN configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('asn-write', 'Create, edit or delete ASN configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('basic-read', 'Basic read operations. Every user should have this capability') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('basic-write', 'Basic write operations. Every user should have this capability') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cache-config-files-read', 'View the generated cache configuration files') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cache-group-read', 'View cache-group configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cache-group-write', 'Create, edit or delete cache-group configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cache-stats-read', 'View Cache statistics read access') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-config-snapshot-read', 'View config snapshot at CDN level') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-config-snapshot-write', 'Config snapshot write access at CDN level') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-health-read', 'View CDN health') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-read', 'View CDN configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-write', 'Create, edit or delete CDN configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-security-keys-read', 'View CDN DNSSEC keys') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-security-keys-write', 'Create, edit or delete CDN DNSSEC keys') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-stats-read', 'View CDN statistics') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('cdn-stats-write', 'Create, edit or delete CDN statistics') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('change-log-read', 'View change-log') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('change-log-write', 'Create change-log entries') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('division-read', 'View division configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('division-write', 'Create, edit or delete division configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-cache-read', 'View delivery-service cache assignment') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-cache-read', 'Create, edit or delete delivery-service cache assignment') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-health-read', 'View delivery-service health') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-read', 'View delivery-service configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-write', 'Create, edit or delete delivery-service configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-security-keys-read', 'View delivery-service security keys') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-security-keys-write', 'Create, edit or delete delivery-service security keys') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-stats-read', 'View delivery-service statistics') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-steering-read', 'View delivery-service steering configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('ds-steering-write', 'Create, edit or delete delivery-service steering configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('federation-routing-read', 'View federation routing') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('federation-routing-write', 'Create, edit or delete federation routing') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('job-read', 'View jobs') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('job-write', 'Create, edit or delete jobs') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('params-read', 'View parameters') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('params-write', 'Create, edit or delete parameters') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('phys-location-read', 'View physical location configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('phys-location-write', 'Create, edit or delete physical location configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('profile-read', 'View profiles') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('profile-write', 'Create, edit or delete profiles') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('queue-updates-write', 'Queue updates to caches') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('region-read', 'View region configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('region-write', 'Create, edit or delete region configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('role-read', 'View role configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('role-write', 'Create, edit or delete role configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('security-keys-read', 'View security keys') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('security-keys-write', 'Create, edit or delete security keys') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('server-pull-updates-read', 'Read server update indication') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('server-pull-updates-write', 'Write server update indication') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('server-read', 'View server configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('server-write', 'Create, edit or delete server configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('static-dns-read', 'View static DNS configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('static-dns-write', 'Create, edit or delete static DNS configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('status-read', 'View the list of defined statuses') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('to-extension-read', 'View Traffic Ops extensions') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('to-extension-write', 'Create, edit or delete Traffic Ops extensions') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('type-read', 'View types configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('type-write', 'Create, edit or delete type configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('user-read', 'View user configuration') ON CONFLICT DO NOTHING;
+insert into capability (name, description) values ('user-write', 'Create, edit or delete user configuration') ON CONFLICT DO NOTHING;
+
+-- roles_capabilities
+insert into role_capability (role_id, cap_name) values (10, 'all-read') ON CONFLICT DO NOTHING;
+insert into role_capability (role_id, cap_name) values (10, 'all-write') ON CONFLICT DO NOTHING;
+
+-- api_capabilities
+insert into api_capability (http_method, route, capability) values ('GET', '/', 'all-read') ON CONFLICT DO NOTHING;
+insert into api_capability (http_method, route, capability) values ('POST', '/', 'all-write') ON CONFLICT DO NOTHING;
+insert into api_capability (http_method, route, capability) values ('PUT', '/', 'all-write') ON CONFLICT DO NOTHING;
+insert into api_capability (http_method, route, capability) values ('PATCH', '/', 'all-write') ON CONFLICT DO NOTHING;
+insert into api_capability (http_method, route, capability) values ('DELETE', '/', 'all-write') ON CONFLICT DO NOTHING;
+
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/asns', 'asn-read') ON CONFLICT DO NOTHING; -- 4
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/asns/*', 'asn-read') ON CONFLICT DO NOTHING; -- 5
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/asns', 'asn-write') ON CONFLICT DO NOTHING; -- 6
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/asns/*', 'asn-write') ON CONFLICT DO NOTHING; -- 7
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/asns/*', 'asn-write') ON CONFLICT DO NOTHING; -- 8
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cache_stats', 'cache-stats-read') ON CONFLICT DO NOTHING; -- 11
+insert into api_capability (http_method, route, capability) values ('GET', '/internal/api/*/daily_summary', 'cache-stats-read') ON CONFLICT DO NOTHING; -- 12
+insert into api_capability (http_method, route, capability) values ('GET', '/internal/api/*/current_stats', 'cache-stats-read') ON CONFLICT DO NOTHING; -- 13
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cachegroups', 'cache-group-read') ON CONFLICT DO NOTHING; -- 16
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cachegroups/list', 'cache-group-read') ON CONFLICT DO NOTHING; -- 17
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cachegroups/trimmed', 'cache-group-read') ON CONFLICT DO NOTHING; -- 18
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cachegroups/*', 'cache-group-read') ON CONFLICT DO NOTHING; -- 19
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/cachegroups', 'cache-group-write') ON CONFLICT DO NOTHING; -- 20
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/cachegroups/create', 'cache-group-write') ON CONFLICT DO NOTHING; -- 21
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/cachegroups/*', 'cache-group-write') ON CONFLICT DO NOTHING; -- 22
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/cachegroups/*/update', 'cache-group-write') ON CONFLICT DO NOTHING; -- 23
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/cachegroups/*', 'cache-group-write') ON CONFLICT DO NOTHING; -- 24
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/cachegroups/*/delete', 'cache-group-write') ON CONFLICT DO NOTHING; -- 25
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/cachegroups/*/queue_update', 'queue-updates-write') ON CONFLICT DO NOTHING; -- 26
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/cachegroups/*/queue_update', 'queue-updates-write') ON CONFLICT DO NOTHING; -- 27
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cachegroups/*/parameters', 'params-read') ON CONFLICT DO NOTHING; -- 28
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns', 'cdn-read') ON CONFLICT DO NOTHING; -- 31
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/*', 'cdn-read') ON CONFLICT DO NOTHING; -- 32
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/name/*', 'cdn-read') ON CONFLICT DO NOTHING; -- 33
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/cdns', 'cdn-write') ON CONFLICT DO NOTHING; -- 34
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/cdns/*', 'cdn-write') ON CONFLICT DO NOTHING; -- 35
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/cdns/*', 'cdn-write') ON CONFLICT DO NOTHING; -- 36
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/cdns/*/queue_update', 'queue-updates-write') ON CONFLICT DO NOTHING; -- 37
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/cdns/*/queue_update', 'queue-updates-write') ON CONFLICT DO NOTHING; -- 38
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/cdns/*/snapshot', 'cdn-config-snapshot-write') ON CONFLICT DO NOTHING; -- 40
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/snapshot/*', 'cdn-config-snapshot-write') ON CONFLICT DO NOTHING; -- 41
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/snapshot/*', 'cdn-config-snapshot-write') ON CONFLICT DO NOTHING; -- 42
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/configs', 'cdn-read') ON CONFLICT DO NOTHING; -- 44
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/*/configs/routing', 'cdn-read') ON CONFLICT DO NOTHING; -- 45
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/*/configs/monitoring', 'cdn-read') ON CONFLICT DO NOTHING; -- 46
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/domains', 'cdn-read') ON CONFLICT DO NOTHING; -- 47
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/health', 'cdn-health-read') ON CONFLICT DO NOTHING; -- 48
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/*/health', 'cdn-health-read') ON CONFLICT DO NOTHING; -- 49
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/capacity', 'cdn-health-read') ON CONFLICT DO NOTHING; -- 50
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/routing', 'cdn-read') ON CONFLICT DO NOTHING; -- 51
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/name/*/sslkeys', 'cdn-security-keys-read') ON CONFLICT DO NOTHING; -- 52
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/usage/overview', 'cdn-stats-read') ON CONFLICT DO NOTHING; -- 54
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/logs', 'change-log-read') ON CONFLICT DO NOTHING; -- 57
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/logs/*/days', 'change-log-read') ON CONFLICT DO NOTHING; -- 58
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/logs/newcount', 'change-log-read') ON CONFLICT DO NOTHING; -- 60
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices', 'ds-read') ON CONFLICT DO NOTHING; -- 69
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/list', 'ds-read') ON CONFLICT DO NOTHING; -- 70
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*', 'ds-read') ON CONFLICT DO NOTHING; -- 71
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*/get', 'ds-read') ON CONFLICT DO NOTHING; -- 72
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/deliveryservices', 'ds-write') ON CONFLICT DO NOTHING; -- 73
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/*/deliveryservices/create', 'ds-write') ON CONFLICT DO NOTHING; -- 74
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/deliveryservices/*', 'ds-write') ON CONFLICT DO NOTHING; -- 75
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/*/deliveryservices/*/update', 'ds-write') ON CONFLICT DO NOTHING; -- 76
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/deliveryservices/*', 'ds-write') ON CONFLICT DO NOTHING; -- 77
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*/health', 'ds-health-read') ON CONFLICT DO NOTHING; -- 78
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*/capacity', 'ds-health-read') ON CONFLICT DO NOTHING; -- 79
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*/routing', 'ds-read') ON CONFLICT DO NOTHING; -- 80
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*/state', 'ds-read') ON CONFLICT DO NOTHING; -- 81
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservice_stats', 'ds-stats-read') ON CONFLICT DO NOTHING; -- 82
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/deliveryservices/request', 'ds-read') ON CONFLICT DO NOTHING; -- 83
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/xmlId/*/sslkeys', 'ds-security-keys-read') ON CONFLICT DO NOTHING; -- 84
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/hostname/#hostname/sslkeys', 'ds-security-keys-read') ON CONFLICT DO NOTHING; -- 85
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/deliveryservices/sslkeys/generate', 'ds-security-keys-write') ON CONFLICT DO NOTHING; -- 86
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/deliveryservices/sslkeys/add', 'ds-security-keys-write') ON CONFLICT DO NOTHING; -- 87
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/xmlId/*/sslkeys/delete', 'ds-security-keys-write') ON CONFLICT DO NOTHING; -- 88
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/xmlId/*/urlkeys', 'ds-security-keys-read') ON CONFLICT DO NOTHING; -- 89
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/deliveryservices/xmlId/*/urlkeys/generate', 'ds-security-keys-write') ON CONFLICT DO NOTHING; -- 90
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*/regexes', 'ds-read') ON CONFLICT DO NOTHING; -- 91
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservice_matches', 'ds-read') ON CONFLICT DO NOTHING; -- 92
+insert into api_capability (http_method, route, capability) values ('GET', '/internal/api/*/steering', 'ds-steering-read') ON CONFLICT DO NOTHING; -- 96
+insert into api_capability (http_method, route, capability) values ('GET', '/internal/api/*/steering/*', 'ds-steering-read') ON CONFLICT DO NOTHING; -- 97
+insert into api_capability (http_method, route, capability) values ('POST', '/internal/api/*/steering', 'ds-steering-write') ON CONFLICT DO NOTHING; -- 98
+insert into api_capability (http_method, route, capability) values ('PUT', '/internal/api/*/steering/*', 'ds-steering-write') ON CONFLICT DO NOTHING; -- 99
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryserviceserver', 'ds-cache-read') ON CONFLICT DO NOTHING; -- 103
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/deliveryservices/*/servers', 'ds-cache-write') ON CONFLICT DO NOTHING; -- 106
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices_regexes', 'ds-read') ON CONFLICT DO NOTHING; -- 109
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*/regexes', 'ds-read') ON CONFLICT DO NOTHING; -- 110
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/deliveryservices/*/regexes/*', 'ds-read') ON CONFLICT DO NOTHING; -- 111
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/deliveryservices/*/regexes', 'ds-write') ON CONFLICT DO NOTHING; -- 112
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/deliveryservices/*/regexes/*', 'ds-write') ON CONFLICT DO NOTHING; -- 113
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/deliveryservices/*/regexes/*', 'ds-write') ON CONFLICT DO NOTHING; -- 114
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/divisions', 'division-read') ON CONFLICT DO NOTHING; -- 120
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/divisions/*', 'division-read') ON CONFLICT DO NOTHING; -- 121
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/divisions', 'division-write') ON CONFLICT DO NOTHING; -- 122
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/divisions/*', 'division-write') ON CONFLICT DO NOTHING; -- 123
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/divisions/*', 'division-write') ON CONFLICT DO NOTHING; -- 124
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/name/*/dnsseckeys', 'cdn-security-keys-read') ON CONFLICT DO NOTHING; -- 127
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/cdns/dnsseckeys/generate', 'cdn-security-keys-write') ON CONFLICT DO NOTHING; -- 128
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cdns/name/*/dnsseckeys/delete', 'cdn-security-keys-write') ON CONFLICT DO NOTHING; -- 129
+insert into api_capability (http_method, route, capability) values ('GET', '/internal/api/*/cdns/dnsseckeys/refresh', 'cdn-security-keys-read') ON CONFLICT DO NOTHING; -- 130
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/to_extensions', 'to-extension-read') ON CONFLICT DO NOTHING; -- 134
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/to_extensions', 'to-extension-write') ON CONFLICT DO NOTHING; -- 135
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/to_extensions/*/delete', 'to-extension-write') ON CONFLICT DO NOTHING; -- 136
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/federations', 'federation-routing-read') ON CONFLICT DO NOTHING; -- 139
+insert into api_capability (http_method, route, capability) values ('GET', '/internal/api/*/federations', 'federation-routing-read') ON CONFLICT DO NOTHING; -- 140
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/federations', 'federation-routing-write') ON CONFLICT DO NOTHING; -- 141
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/federations', 'federation-routing-write') ON CONFLICT DO NOTHING; -- 142
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/federations', 'federation-routing-write') ON CONFLICT DO NOTHING; -- 143
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/hwinfo', 'all-read') ON CONFLICT DO NOTHING; -- 148
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/parameters', 'params-read') ON CONFLICT DO NOTHING; -- 164
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/parameters/*', 'params-read') ON CONFLICT DO NOTHING; -- 168
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/parameters', 'params-write') ON CONFLICT DO NOTHING; -- 169
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/parameters/*', 'params-write') ON CONFLICT DO NOTHING; -- 170
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/parameters/*', 'params-write') ON CONFLICT DO NOTHING; -- 171
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/parameters/*/validate', 'params-write') ON CONFLICT DO NOTHING; -- 172
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/profiles/*/parameters', 'params-read') ON CONFLICT DO NOTHING; -- 173
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/profiles/name/*/parameters', 'params-read') ON CONFLICT DO NOTHING; -- 174a
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/parameters/profile', 'params-read') ON CONFLICT DO NOTHING; -- 174b
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/profiles/name/*/parameters', 'params-write') ON CONFLICT DO NOTHING; -- 175
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/profiles/*/parameters', 'params-write') ON CONFLICT DO NOTHING; -- 176
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/profileparameters', 'params-read') ON CONFLICT DO NOTHING; -- 181
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/profileparameters', 'params-write') ON CONFLICT DO NOTHING; -- 182
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/profileparameters/*/*', 'params-write') ON CONFLICT DO NOTHING; -- 183
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/cachegroupparameters', 'params-read') ON CONFLICT DO NOTHING; -- 186
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/phys_locations', 'phys-location-read') ON CONFLICT DO NOTHING; -- 191
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/phys_locations/trimmed', 'phys-location-read') ON CONFLICT DO NOTHING; -- 192
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/phys_locations/*', 'phys-location-read') ON CONFLICT DO NOTHING; -- 193
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/phys_locations', 'phys-location-write') ON CONFLICT DO NOTHING; -- 194
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/regions/*/phys_locations', 'phys-location-write') ON CONFLICT DO NOTHING; -- 195
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/phys_locations/*', 'phys-location-write') ON CONFLICT DO NOTHING; -- 196
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/phys_locations/*', 'phys-location-write') ON CONFLICT DO NOTHING; -- 197
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/profiles', 'profile-read') ON CONFLICT DO NOTHING; -- 200
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/profiles/trimmed', 'profile-read') ON CONFLICT DO NOTHING; -- 201
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/profiles/*', 'profile-read') ON CONFLICT DO NOTHING; -- 202
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/profiles', 'profile-write') ON CONFLICT DO NOTHING; -- 203
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/profiles/*', 'profile-write') ON CONFLICT DO NOTHING; -- 204
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/profiles/*', 'profile-write') ON CONFLICT DO NOTHING; -- 205
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/profiles/name/*/copy/*', 'profile-write') ON CONFLICT DO NOTHING; -- 206
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/regions', 'region-read') ON CONFLICT DO NOTHING; -- 213
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/regions/*', 'region-read') ON CONFLICT DO NOTHING; -- 214
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/regions', 'region-write') ON CONFLICT DO NOTHING; -- 215
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/divisions/*/regions', 'region-write') ON CONFLICT DO NOTHING; -- 216
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/regions/*', 'region-write') ON CONFLICT DO NOTHING; -- 217
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/regions/*', 'region-write') ON CONFLICT DO NOTHING; -- 218
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/riak/ping', 'cdn-security-keys-write') ON CONFLICT DO NOTHING; -- 221
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/keys/ping', 'security-keys-write') ON CONFLICT DO NOTHING; -- 222
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/riak/bucket/#bucket/key/#key/values', 'security-keys-read') ON CONFLICT DO NOTHING; -- 223
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/riak/stats', 'security-keys-read') ON CONFLICT DO NOTHING; -- 224
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/roles', 'role-read') ON CONFLICT DO NOTHING; -- 227
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers', 'server-read') ON CONFLICT DO NOTHING; -- 230
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers?dsId=*', 'server-read') ON CONFLICT DO NOTHING; -- 231
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers?type=*', 'server-read') ON CONFLICT DO NOTHING; -- 232
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers?status=*', 'server-read') ON CONFLICT DO NOTHING; -- 233
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers?profileId=*', 'server-read') ON CONFLICT DO NOTHING; -- 234
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers/*', 'server-read') ON CONFLICT DO NOTHING; -- 235
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/servers', 'server-write') ON CONFLICT DO NOTHING; -- 237
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/servers/*', 'server-write') ON CONFLICT DO NOTHING; -- 238
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/servers/*', 'server-write') ON CONFLICT DO NOTHING; -- 239
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers/details', 'server-read') ON CONFLICT DO NOTHING; -- 247
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers/totals', 'server-read') ON CONFLICT DO NOTHING; -- 249
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servers/checks', 'server-read') ON CONFLICT DO NOTHING; -- 250a
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/servercheck/aadata', 'server-read') ON CONFLICT DO NOTHING; -- 250b
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/servercheck', 'server-write') ON CONFLICT DO NOTHING; -- 251
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/servers/*/queue_update', 'queue-updates-write') ON CONFLICT DO NOTHING; -- 252
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/servers/*/queue_update', 'queue-updates-write') ON CONFLICT DO NOTHING; -- 253
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/*/stats_summary', 'cdn-stats-read') ON CONFLICT DO NOTHING; -- 258
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/*/stats_summary?lastSummaryDate=true', 'cdn-stats-read') ON CONFLICT DO NOTHING; -- 259
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/*/stats_summary/create', 'cdn-stats-write') ON CONFLICT DO NOTHING; -- 260
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/statuses', 'status-read') ON CONFLICT DO NOTHING; -- 263
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/statuses/*', 'status-read') ON CONFLICT DO NOTHING; -- 264
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/staticdnsentries', 'static-dns-read') ON CONFLICT DO NOTHING; -- 270
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/system/info', 'basic-read') ON CONFLICT DO NOTHING; -- 275
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/types', 'type-read') ON CONFLICT DO NOTHING; -- 278
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/types/trimmed', 'type-read') ON CONFLICT DO NOTHING; -- 279
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/types/*', 'type-read') ON CONFLICT DO NOTHING; -- 280
+insert into api_capability (http_method, route, capability) values ('POST', '/api/*/types', 'type-write') ON CONFLICT DO NOTHING; -- 281
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/types/*', 'type-write') ON CONFLICT DO NOTHING; -- 282
+insert into api_capability (http_method, route, capability) values ('DELETE', '/api/*/types/*', 'type-write') ON CONFLICT DO NOTHING; -- 283
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/users', 'user-read') ON CONFLICT DO NOTHING; -- 289
+insert into api_capability (http_method, route, capability) values ('GET', '/api/*/users/*', 'user-read') ON CONFLICT DO NOTHING; -- 290
+insert into api_capability (http_method, route, capability) values ('PUT', '/api/*/users/*', 'user-write') ON CONFLICT DO NOTHING; -- 292
+
+
-- types
-- delivery service types
insert into type (name, description, use_in_table) values ('HTTP', 'HTTP Content Routing', 'deliveryservice') ON CONFLICT (name) DO NOTHING;
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/5392f500/traffic_ops/app/lib/Schema/Result/ApiCapability.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Schema/Result/ApiCapability.pm b/traffic_ops/app/lib/Schema/Result/ApiCapability.pm
new file mode 100644
index 0000000..2c7e89c
--- /dev/null
+++ b/traffic_ops/app/lib/Schema/Result/ApiCapability.pm
@@ -0,0 +1,124 @@
+use utf8;
+package Schema::Result::ApiCapability;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Schema::Result::ApiCapability
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<api_capability>
+
+=cut
+
+__PACKAGE__->table("api_capability");
+
+=head1 ACCESSORS
+
+=head2 id
+
+ data_type: 'bigint'
+ is_auto_increment: 1
+ is_nullable: 0
+ sequence: 'api_capability_id_seq'
+
+=head2 http_method
+
+ data_type: 'enum'
+ extra: {custom_type_name => "http_method_t",list => ["GET","POST","PUT","PATCH","DELETE"]}
+ is_nullable: 0
+
+=head2 route
+
+ data_type: 'text'
+ is_nullable: 0
+
+=head2 capability
+
+ data_type: 'text'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 last_updated
+
+ data_type: 'timestamp with time zone'
+ default_value: current_timestamp
+ is_nullable: 1
+ original: {default_value => \"now()"}
+
+=cut
+
+__PACKAGE__->add_columns(
+ "id",
+ {
+ data_type => "bigint",
+ is_auto_increment => 1,
+ is_nullable => 0,
+ sequence => "api_capability_id_seq",
+ },
+ "http_method",
+ {
+ data_type => "enum",
+ extra => {
+ custom_type_name => "http_method_t",
+ list => ["GET", "POST", "PUT", "PATCH", "DELETE"],
+ },
+ is_nullable => 0,
+ },
+ "route",
+ { data_type => "text", is_nullable => 0 },
+ "capability",
+ { data_type => "text", is_foreign_key => 1, is_nullable => 0 },
+ "last_updated",
+ {
+ data_type => "timestamp with time zone",
+ default_value => \"current_timestamp",
+ is_nullable => 1,
+ original => { default_value => \"now()" },
+ },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 RELATIONS
+
+=head2 capability
+
+Type: belongs_to
+
+Related object: L<Schema::Result::Capability>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "capability",
+ "Schema::Result::Capability",
+ { name => "capability" },
+ { is_deferrable => 0, on_delete => "RESTRICT", on_update => "NO ACTION" },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07046 @ 2017-04-01 22:22:35
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:vYfANFCOS9i3LpGHRzMv3w
+
+
+# You can replace this text with custom code or comments, and it will be preserved on regeneration
+1;
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/5392f500/traffic_ops/app/lib/Schema/Result/Capability.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Schema/Result/Capability.pm b/traffic_ops/app/lib/Schema/Result/Capability.pm
new file mode 100644
index 0000000..d636726
--- /dev/null
+++ b/traffic_ops/app/lib/Schema/Result/Capability.pm
@@ -0,0 +1,109 @@
+use utf8;
+package Schema::Result::Capability;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Schema::Result::Capability
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<capability>
+
+=cut
+
+__PACKAGE__->table("capability");
+
+=head1 ACCESSORS
+
+=head2 name
+
+ data_type: 'text'
+ is_nullable: 0
+
+=head2 description
+
+ data_type: 'text'
+ is_nullable: 1
+
+=head2 last_updated
+
+ data_type: 'timestamp with time zone'
+ default_value: current_timestamp
+ is_nullable: 1
+ original: {default_value => \"now()"}
+
+=cut
+
+__PACKAGE__->add_columns(
+ "name",
+ { data_type => "text", is_nullable => 0 },
+ "description",
+ { data_type => "text", is_nullable => 1 },
+ "last_updated",
+ {
+ data_type => "timestamp with time zone",
+ default_value => \"current_timestamp",
+ is_nullable => 1,
+ original => { default_value => \"now()" },
+ },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</name>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("name");
+
+=head1 RELATIONS
+
+=head2 api_capabilities
+
+Type: has_many
+
+Related object: L<Schema::Result::ApiCapability>
+
+=cut
+
+__PACKAGE__->has_many(
+ "api_capabilities",
+ "Schema::Result::ApiCapability",
+ { "foreign.capability" => "self.name" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 role_capabilities
+
+Type: has_many
+
+Related object: L<Schema::Result::RoleCapability>
+
+=cut
+
+__PACKAGE__->has_many(
+ "role_capabilities",
+ "Schema::Result::RoleCapability",
+ { "foreign.cap_name" => "self.name" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07046 @ 2017-04-01 22:22:35
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:34+RZwrrOVdouhv+bD2V/Q
+
+
+# You can replace this text with custom code or comments, and it will be preserved on regeneration
+1;
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/5392f500/traffic_ops/app/lib/Schema/Result/RoleCapability.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Schema/Result/RoleCapability.pm b/traffic_ops/app/lib/Schema/Result/RoleCapability.pm
new file mode 100644
index 0000000..6154ebd
--- /dev/null
+++ b/traffic_ops/app/lib/Schema/Result/RoleCapability.pm
@@ -0,0 +1,99 @@
+use utf8;
+package Schema::Result::RoleCapability;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Schema::Result::RoleCapability
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<role_capability>
+
+=cut
+
+__PACKAGE__->table("role_capability");
+
+=head1 ACCESSORS
+
+=head2 role_id
+
+ data_type: 'bigint'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 cap_name
+
+ data_type: 'text'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 last_updated
+
+ data_type: 'timestamp with time zone'
+ default_value: current_timestamp
+ is_nullable: 1
+ original: {default_value => \"now()"}
+
+=cut
+
+__PACKAGE__->add_columns(
+ "role_id",
+ { data_type => "bigint", is_foreign_key => 1, is_nullable => 0 },
+ "cap_name",
+ { data_type => "text", is_foreign_key => 1, is_nullable => 0 },
+ "last_updated",
+ {
+ data_type => "timestamp with time zone",
+ default_value => \"current_timestamp",
+ is_nullable => 1,
+ original => { default_value => \"now()" },
+ },
+);
+
+=head1 RELATIONS
+
+=head2 cap_name
+
+Type: belongs_to
+
+Related object: L<Schema::Result::Capability>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "cap_name",
+ "Schema::Result::Capability",
+ { name => "cap_name" },
+ { is_deferrable => 0, on_delete => "RESTRICT", on_update => "NO ACTION" },
+);
+
+=head2 role
+
+Type: belongs_to
+
+Related object: L<Schema::Result::Role>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "role",
+ "Schema::Result::Role",
+ { id => "role_id" },
+ { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07046 @ 2017-03-27 14:22:23
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:QKteDmebV7GN1Oc5uwNo7A
+
+
+# You can replace this text with custom code or comments, and it will be preserved on regeneration
+1;
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/5392f500/traffic_ops/app/lib/Schema/Result/UserRole.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Schema/Result/UserRole.pm b/traffic_ops/app/lib/Schema/Result/UserRole.pm
new file mode 100644
index 0000000..38a694e
--- /dev/null
+++ b/traffic_ops/app/lib/Schema/Result/UserRole.pm
@@ -0,0 +1,99 @@
+use utf8;
+package Schema::Result::UserRole;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Schema::Result::UserRole
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<user_role>
+
+=cut
+
+__PACKAGE__->table("user_role");
+
+=head1 ACCESSORS
+
+=head2 user_id
+
+ data_type: 'bigint'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 role_id
+
+ data_type: 'bigint'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 last_updated
+
+ data_type: 'timestamp with time zone'
+ default_value: current_timestamp
+ is_nullable: 1
+ original: {default_value => \"now()"}
+
+=cut
+
+__PACKAGE__->add_columns(
+ "user_id",
+ { data_type => "bigint", is_foreign_key => 1, is_nullable => 0 },
+ "role_id",
+ { data_type => "bigint", is_foreign_key => 1, is_nullable => 0 },
+ "last_updated",
+ {
+ data_type => "timestamp with time zone",
+ default_value => \"current_timestamp",
+ is_nullable => 1,
+ original => { default_value => \"now()" },
+ },
+);
+
+=head1 RELATIONS
+
+=head2 role
+
+Type: belongs_to
+
+Related object: L<Schema::Result::Role>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "role",
+ "Schema::Result::Role",
+ { id => "role_id" },
+ { is_deferrable => 0, on_delete => "RESTRICT", on_update => "NO ACTION" },
+);
+
+=head2 user
+
+Type: belongs_to
+
+Related object: L<Schema::Result::TmUser>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "user",
+ "Schema::Result::TmUser",
+ { id => "user_id" },
+ { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07046 @ 2017-03-27 10:20:36
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:jniOIr+9VEUCu1dZp9snNg
+
+
+# You can replace this text with custom code or comments, and it will be preserved on regeneration
+1;