Compare commits
45 Commits
93f1b81d70
...
v6.2.1
Author | SHA1 | Date | |
---|---|---|---|
|
c55b00c74f | ||
c895f509b0 | |||
|
5968915331 | ||
|
44ffc082f6 | ||
|
b716ae5675 | ||
01a0b59494 | |||
|
8ebc3da0bb | ||
|
133577a4fa | ||
|
a19615db41 | ||
|
32b212a6bf | ||
|
00ec4529cd | ||
102d03888f | |||
9f8247320e | |||
|
ef871de30e | ||
|
b3a15ce26b | ||
270695aec2 | |||
ad7392a326 | |||
92a50a42e2 | |||
|
a3a8856d8c | ||
150c19b1b0 | |||
f04c51ee4e | |||
c4338bf957 | |||
5b06f4ede8 | |||
e7ab2cc956 | |||
5ebf8a66f7 | |||
3d4e886b9b | |||
a00d31caf3 | |||
40fe707287 | |||
8296be01ba | |||
|
dbeb003292 | ||
f048501c48 | |||
498350b3f3 | |||
|
91e82c9c65 | ||
|
24067ea82b | ||
|
aa7deddba0 | ||
b2d13203d1 | |||
19c1092b5b | |||
|
94ab949df8 | ||
|
9eb2451c2f | ||
|
6e521bfa3e | ||
|
239720fe0c | ||
|
8571e01e44 | ||
|
6f482ec6d9 | ||
|
5e30dc0f89 | ||
|
3d76d12c86 |
@@ -18,4 +18,8 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
NPMRC: ${{ secrets.NPMRC}}
|
NPMRC: ${{ secrets.NPMRC}}
|
||||||
|
|
||||||
- run: npm run lint:check
|
- run: npm run lint:check
|
||||||
|
- run: |
|
||||||
|
cd client
|
||||||
|
npm ci
|
||||||
|
npm run license-checker
|
@@ -21,10 +21,11 @@ jobs:
|
|||||||
echo '${{ secrets.NPMRC}}' > client/.npmrc
|
echo '${{ secrets.NPMRC}}' > client/.npmrc
|
||||||
|
|
||||||
- name: Install Chrome for Angular tests
|
- name: Install Chrome for Angular tests
|
||||||
run: apt-get update
|
run: |
|
||||||
run: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
apt-get update
|
||||||
run: apt install -y ./google-chrome*.deb;
|
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
||||||
run: export CHROME_BIN=/usr/bin/google-chrome
|
apt install -y ./google-chrome*.deb;
|
||||||
|
export CHROME_BIN=/usr/bin/google-chrome
|
||||||
|
|
||||||
- name: Write cypress credentials
|
- name: Write cypress credentials
|
||||||
run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json
|
run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json
|
||||||
|
@@ -48,7 +48,7 @@ jobs:
|
|||||||
description: Compile SAS 9 services, remove tests & create deployment program
|
description: Compile SAS 9 services, remove tests & create deployment program
|
||||||
run: |
|
run: |
|
||||||
cd sas
|
cd sas
|
||||||
npm ci
|
npm i
|
||||||
sasjs c -t sas9
|
sasjs c -t sas9
|
||||||
rm -rf sasjsbuild/tests
|
rm -rf sasjsbuild/tests
|
||||||
sasjs b -t sas9
|
sasjs b -t sas9
|
||||||
|
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,14 +1,15 @@
|
|||||||
# [6.2.0](https://git.datacontroller.io/dc/dc/compare/v6.1.0...v6.2.0) (2023-08-24)
|
## [6.2.1](https://git.datacontroller.io/dc/dc/compare/v6.2.0...v6.2.1) (2023-10-09)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* re-enabling full REPLACE uploads ([08e39c4](https://git.datacontroller.io/dc/dc/commit/08e39c4fca570406f9aad3d907cb04596421d074))
|
* approve, history and submit pages grouped in review module ([e056ece](https://git.datacontroller.io/dc/dc/commit/e056ece2234ef6aab050f6a5b1f8de633b163d91))
|
||||||
|
* closes [#39](https://git.datacontroller.io/dc/dc/issues/39) upcase issue in MPE_SECURITY ([a00d31c](https://git.datacontroller.io/dc/dc/commit/a00d31caf3c5634cd61a4700fb175e76856edbb6))
|
||||||
|
* handsontable v13 ([6f482ec](https://git.datacontroller.io/dc/dc/commit/6f482ec6d909907a304ef9975262889e2370035f))
|
||||||
### Features
|
* latest adapter ([5e30dc0](https://git.datacontroller.io/dc/dc/commit/5e30dc0f892fab2af41f4ea56e30f27ec3b3912e))
|
||||||
|
* sasjs/cli and sasjs/core updated to the latest ([8571e01](https://git.datacontroller.io/dc/dc/commit/8571e01e44a8cb6df9d150d271c34bb75bffdf31))
|
||||||
* support for European numeric formats ([e48e47b](https://git.datacontroller.io/dc/dc/commit/e48e47bc635452b59e107b235e597c26e748875e))
|
* updating editors/stagedata to address issues in particular viya configurations as described in issue [#33](https://git.datacontroller.io/dc/dc/issues/33) ([94ab949](https://git.datacontroller.io/dc/dc/commit/94ab949df8c75072525751a2156b7a32c2e641dc))
|
||||||
|
* updating logic for REPLACE loadtype ([1f2ce55](https://git.datacontroller.io/dc/dc/commit/1f2ce55f249f4af56f0cacdec47e69246cd47431))
|
||||||
|
|
||||||
# [6.2.0](https://git.datacontroller.io/dc/dc/compare/v6.1.0...v6.2.0) (2023-08-24)
|
# [6.2.0](https://git.datacontroller.io/dc/dc/compare/v6.1.0...v6.2.0) (2023-08-24)
|
||||||
|
|
||||||
@@ -17,7 +18,6 @@
|
|||||||
|
|
||||||
* re-enabling full REPLACE uploads ([08e39c4](https://git.datacontroller.io/dc/dc/commit/08e39c4fca570406f9aad3d907cb04596421d074))
|
* re-enabling full REPLACE uploads ([08e39c4](https://git.datacontroller.io/dc/dc/commit/08e39c4fca570406f9aad3d907cb04596421d074))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* support for European numeric formats ([e48e47b](https://git.datacontroller.io/dc/dc/commit/e48e47bc635452b59e107b235e597c26e748875e))
|
* support for European numeric formats ([e48e47b](https://git.datacontroller.io/dc/dc/commit/e48e47bc635452b59e107b235e597c26e748875e))
|
||||||
|
@@ -10,7 +10,7 @@ const check = (cwd) => {
|
|||||||
onlyAllow:
|
onlyAllow:
|
||||||
'AFLv2.1;Apache 2.0;Apache-2.0;Apache*;Artistic-2.0;0BSD;BSD*;BSD-2-Clause;BSD-3-Clause;CC0-1.0;CC-BY-3.0;CC-BY-4.0;ISC;MIT;MPL-2.0;ODC-By-1.0;Python-2.0;Unlicense;',
|
'AFLv2.1;Apache 2.0;Apache-2.0;Apache*;Artistic-2.0;0BSD;BSD*;BSD-2-Clause;BSD-3-Clause;CC0-1.0;CC-BY-3.0;CC-BY-4.0;ISC;MIT;MPL-2.0;ODC-By-1.0;Python-2.0;Unlicense;',
|
||||||
excludePackages:
|
excludePackages:
|
||||||
'@cds/city@1.1.0;@handsontable/angular@13.0.0;handsontable@13.0.0;hyperformula@2.5.0;jackspeak@2.2.0;path-scurry@1.7.0'
|
'@cds/city@1.1.0;@handsontable/angular@13.1.0;handsontable@13.1.0;hyperformula@2.5.0;jackspeak@2.2.0;path-scurry@1.7.0'
|
||||||
},
|
},
|
||||||
(error, json) => {
|
(error, json) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
817
client/package-lock.json
generated
817
client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -48,9 +48,9 @@
|
|||||||
"@clr/angular": "^13.17.0",
|
"@clr/angular": "^13.17.0",
|
||||||
"@clr/icons": "^13.0.2",
|
"@clr/icons": "^13.0.2",
|
||||||
"@clr/ui": "^13.17.0",
|
"@clr/ui": "^13.17.0",
|
||||||
"@handsontable/angular": "^13.0.0",
|
"@handsontable/angular": "^13.1.0",
|
||||||
"@sasjs/adapter": "4.3.6",
|
"@sasjs/adapter": "4.10.1",
|
||||||
"@sasjs/utils": "^3.3.0",
|
"@sasjs/utils": "^3.4.0",
|
||||||
"@sheet/crypto": "1.20211122.1",
|
"@sheet/crypto": "1.20211122.1",
|
||||||
"@types/d3-graphviz": "^2.6.7",
|
"@types/d3-graphviz": "^2.6.7",
|
||||||
"@types/text-encoding": "0.0.35",
|
"@types/text-encoding": "0.0.35",
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
"crypto-js": "^3.3.0",
|
"crypto-js": "^3.3.0",
|
||||||
"d3-graphviz": "^5.0.2",
|
"d3-graphviz": "^5.0.2",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"handsontable": "^13.0.0",
|
"handsontable": "^13.1.0",
|
||||||
"https-browserify": "1.0.0",
|
"https-browserify": "1.0.0",
|
||||||
"hyperformula": "^2.5.0",
|
"hyperformula": "^2.5.0",
|
||||||
"iconv-lite": "^0.5.0",
|
"iconv-lite": "^0.5.0",
|
||||||
|
9673
package-lock.json
generated
9673
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "dcfrontend",
|
"name": "dcfrontend",
|
||||||
"version": "6.0.0",
|
"version": "6.2.0",
|
||||||
"description": "Data Controller",
|
"description": "Data Controller",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@saithodev/semantic-release-gitea": "^2.1.0",
|
"@saithodev/semantic-release-gitea": "^2.1.0",
|
||||||
|
116
sas/package-lock.json
generated
116
sas/package-lock.json
generated
@@ -6,8 +6,8 @@
|
|||||||
"": {
|
"": {
|
||||||
"name": "dc-sas",
|
"name": "dc-sas",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sasjs/cli": "^4.4.2",
|
"@sasjs/cli": "^4.11.1",
|
||||||
"@sasjs/core": "^4.46.4"
|
"@sasjs/core": "^4.47.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@coolaj86/urequest": {
|
"node_modules/@coolaj86/urequest": {
|
||||||
@@ -29,9 +29,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sasjs/adapter": {
|
"node_modules/@sasjs/adapter": {
|
||||||
"version": "4.5.1",
|
"version": "4.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/@sasjs/adapter/-/adapter-4.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@sasjs/adapter/-/adapter-4.10.1.tgz",
|
||||||
"integrity": "sha512-WeKDMfCivBywxDZ6t0jng78ZBPoMk8RIHKFTNDDmvuvmXq5Mr5oqZ0r5lRPB863XkGOeVi6UIEI1+JawZ2TlWQ==",
|
"integrity": "sha512-/z6eR+3nNaLPyycK8YmpF+GAWNy0zgdl8n4cv4r45hjVBulPHVop7oj57JM/0uIPVOTT2V9IwrMCT/sFPq++vw==",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sasjs/utils": "2.52.0",
|
"@sasjs/utils": "2.52.0",
|
||||||
@@ -78,21 +78,21 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sasjs/cli": {
|
"node_modules/@sasjs/cli": {
|
||||||
"version": "4.4.2",
|
"version": "4.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-4.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-4.11.1.tgz",
|
||||||
"integrity": "sha512-o1Qp+L7vJOH9dbsEPJK6GaQR7yWW+W0BAI1rrD55+Ij3USMCcdWcRJAOvFxwS8Gflq5BuNrVqa39rg4RK0ZVEQ==",
|
"integrity": "sha512-aI8V3YJGFXcY9OlNas0h8ZrajLIRPn4KmGkaOLHTDa8rZ2SOtj6W5by1RwyPB9iPIHcqW3JV3OgmtEB048zuYQ==",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sasjs/adapter": "4.5.1",
|
"@sasjs/adapter": "4.10.1",
|
||||||
"@sasjs/core": "4.46.3",
|
"@sasjs/core": "4.46.3",
|
||||||
"@sasjs/lint": "2.3.1",
|
"@sasjs/lint": "2.3.1",
|
||||||
"@sasjs/utils": "3.3.0",
|
"@sasjs/utils": "3.4.0",
|
||||||
"adm-zip": "0.5.9",
|
"adm-zip": "0.5.10",
|
||||||
"chalk": "4.1.2",
|
"chalk": "4.1.2",
|
||||||
"dotenv": "16.0.3",
|
"dotenv": "16.0.3",
|
||||||
"esm": "3.2.25",
|
"esm": "3.2.25",
|
||||||
"find": "0.3.0",
|
"find": "0.3.0",
|
||||||
"js-base64": "3.7.2",
|
"js-base64": "3.7.5",
|
||||||
"jsdom": "22.1.0",
|
"jsdom": "22.1.0",
|
||||||
"jwt-decode": "3.1.2",
|
"jwt-decode": "3.1.2",
|
||||||
"lodash.groupby": "4.6.0",
|
"lodash.groupby": "4.6.0",
|
||||||
@@ -116,9 +116,9 @@
|
|||||||
"integrity": "sha512-Grwydm5GxBsYk238PZw41XPjXVVQ9vWcvfZ06L2P0bQbvK0sGn7l69JA7H5MGr3QcaLpiD4Kg70cAh7PgE+JOw=="
|
"integrity": "sha512-Grwydm5GxBsYk238PZw41XPjXVVQ9vWcvfZ06L2P0bQbvK0sGn7l69JA7H5MGr3QcaLpiD4Kg70cAh7PgE+JOw=="
|
||||||
},
|
},
|
||||||
"node_modules/@sasjs/core": {
|
"node_modules/@sasjs/core": {
|
||||||
"version": "4.46.4",
|
"version": "4.47.0",
|
||||||
"resolved": "https://registry.npmjs.org/@sasjs/core/-/core-4.46.4.tgz",
|
"resolved": "https://registry.npmjs.org/@sasjs/core/-/core-4.47.0.tgz",
|
||||||
"integrity": "sha512-Q4UiOEYEHWCYn4ak+2BaKnrusLauyvKK/Hq4Y4RwJOfwA2MSjOzJSV8fDpbhnY1Dyubbk4SChA6yAL8lc0hn1Q=="
|
"integrity": "sha512-ysSii9kTZuUsCfjaCu3coKtdnBmFF03EoUnddmAUKLbrD7y5/m3fsiDrpTYoAJ75+xuzAx+ssj0xGG3gVqCm7w=="
|
||||||
},
|
},
|
||||||
"node_modules/@sasjs/lint": {
|
"node_modules/@sasjs/lint": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
@@ -166,9 +166,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sasjs/utils": {
|
"node_modules/@sasjs/utils": {
|
||||||
"version": "3.3.0",
|
"version": "3.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-3.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-3.4.0.tgz",
|
||||||
"integrity": "sha512-ZJ+c2d/rEoF340Ay3TZrXO4c2ain7AvSzkRuKG2H2qxwIlQQTk/9Rbknmy0mo3Y/QRScBYl0Fw5xSZ8SMHjljg==",
|
"integrity": "sha512-KHkuOcbwKdD9HrgwKYrMPPuKoFzOAEyNpUjHHhyefxRlrpLwTaf08nYQXFBUhqbWuS+hPRqFLozx45x+xExgyQ==",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fast-csv/format": "4.3.5",
|
"@fast-csv/format": "4.3.5",
|
||||||
@@ -230,9 +230,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/tough-cookie": {
|
"node_modules/@types/tough-cookie": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz",
|
||||||
"integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
|
"integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==",
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/abab": {
|
"node_modules/abab": {
|
||||||
@@ -255,9 +255,9 @@
|
|||||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
},
|
},
|
||||||
"node_modules/adm-zip": {
|
"node_modules/adm-zip": {
|
||||||
"version": "0.5.9",
|
"version": "0.5.10",
|
||||||
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
|
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz",
|
||||||
"integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==",
|
"integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.0"
|
"node": ">=6.0"
|
||||||
}
|
}
|
||||||
@@ -662,9 +662,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/follow-redirects": {
|
"node_modules/follow-redirects": {
|
||||||
"version": "1.15.2",
|
"version": "1.15.3",
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
|
||||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "individual",
|
"type": "individual",
|
||||||
@@ -945,9 +945,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/js-base64": {
|
"node_modules/js-base64": {
|
||||||
"version": "3.7.2",
|
"version": "3.7.5",
|
||||||
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz",
|
||||||
"integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ=="
|
"integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA=="
|
||||||
},
|
},
|
||||||
"node_modules/jsdom": {
|
"node_modules/jsdom": {
|
||||||
"version": "22.1.0",
|
"version": "22.1.0",
|
||||||
@@ -1755,9 +1755,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@sasjs/adapter": {
|
"@sasjs/adapter": {
|
||||||
"version": "4.5.1",
|
"version": "4.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/@sasjs/adapter/-/adapter-4.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@sasjs/adapter/-/adapter-4.10.1.tgz",
|
||||||
"integrity": "sha512-WeKDMfCivBywxDZ6t0jng78ZBPoMk8RIHKFTNDDmvuvmXq5Mr5oqZ0r5lRPB863XkGOeVi6UIEI1+JawZ2TlWQ==",
|
"integrity": "sha512-/z6eR+3nNaLPyycK8YmpF+GAWNy0zgdl8n4cv4r45hjVBulPHVop7oj57JM/0uIPVOTT2V9IwrMCT/sFPq++vw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@sasjs/utils": "2.52.0",
|
"@sasjs/utils": "2.52.0",
|
||||||
"axios": "0.27.2",
|
"axios": "0.27.2",
|
||||||
@@ -1798,20 +1798,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@sasjs/cli": {
|
"@sasjs/cli": {
|
||||||
"version": "4.4.2",
|
"version": "4.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-4.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-4.11.1.tgz",
|
||||||
"integrity": "sha512-o1Qp+L7vJOH9dbsEPJK6GaQR7yWW+W0BAI1rrD55+Ij3USMCcdWcRJAOvFxwS8Gflq5BuNrVqa39rg4RK0ZVEQ==",
|
"integrity": "sha512-aI8V3YJGFXcY9OlNas0h8ZrajLIRPn4KmGkaOLHTDa8rZ2SOtj6W5by1RwyPB9iPIHcqW3JV3OgmtEB048zuYQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@sasjs/adapter": "4.5.1",
|
"@sasjs/adapter": "4.10.1",
|
||||||
"@sasjs/core": "4.46.3",
|
"@sasjs/core": "4.46.3",
|
||||||
"@sasjs/lint": "2.3.1",
|
"@sasjs/lint": "2.3.1",
|
||||||
"@sasjs/utils": "3.3.0",
|
"@sasjs/utils": "3.4.0",
|
||||||
"adm-zip": "0.5.9",
|
"adm-zip": "0.5.10",
|
||||||
"chalk": "4.1.2",
|
"chalk": "4.1.2",
|
||||||
"dotenv": "16.0.3",
|
"dotenv": "16.0.3",
|
||||||
"esm": "3.2.25",
|
"esm": "3.2.25",
|
||||||
"find": "0.3.0",
|
"find": "0.3.0",
|
||||||
"js-base64": "3.7.2",
|
"js-base64": "3.7.5",
|
||||||
"jsdom": "22.1.0",
|
"jsdom": "22.1.0",
|
||||||
"jwt-decode": "3.1.2",
|
"jwt-decode": "3.1.2",
|
||||||
"lodash.groupby": "4.6.0",
|
"lodash.groupby": "4.6.0",
|
||||||
@@ -1834,9 +1834,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@sasjs/core": {
|
"@sasjs/core": {
|
||||||
"version": "4.46.4",
|
"version": "4.47.0",
|
||||||
"resolved": "https://registry.npmjs.org/@sasjs/core/-/core-4.46.4.tgz",
|
"resolved": "https://registry.npmjs.org/@sasjs/core/-/core-4.47.0.tgz",
|
||||||
"integrity": "sha512-Q4UiOEYEHWCYn4ak+2BaKnrusLauyvKK/Hq4Y4RwJOfwA2MSjOzJSV8fDpbhnY1Dyubbk4SChA6yAL8lc0hn1Q=="
|
"integrity": "sha512-ysSii9kTZuUsCfjaCu3coKtdnBmFF03EoUnddmAUKLbrD7y5/m3fsiDrpTYoAJ75+xuzAx+ssj0xGG3gVqCm7w=="
|
||||||
},
|
},
|
||||||
"@sasjs/lint": {
|
"@sasjs/lint": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
@@ -1878,9 +1878,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@sasjs/utils": {
|
"@sasjs/utils": {
|
||||||
"version": "3.3.0",
|
"version": "3.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-3.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-3.4.0.tgz",
|
||||||
"integrity": "sha512-ZJ+c2d/rEoF340Ay3TZrXO4c2ain7AvSzkRuKG2H2qxwIlQQTk/9Rbknmy0mo3Y/QRScBYl0Fw5xSZ8SMHjljg==",
|
"integrity": "sha512-KHkuOcbwKdD9HrgwKYrMPPuKoFzOAEyNpUjHHhyefxRlrpLwTaf08nYQXFBUhqbWuS+hPRqFLozx45x+xExgyQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@fast-csv/format": "4.3.5",
|
"@fast-csv/format": "4.3.5",
|
||||||
"@types/fs-extra": "9.0.13",
|
"@types/fs-extra": "9.0.13",
|
||||||
@@ -1934,9 +1934,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/tough-cookie": {
|
"@types/tough-cookie": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz",
|
||||||
"integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
|
"integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==",
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
"abab": {
|
"abab": {
|
||||||
@@ -1961,9 +1961,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"adm-zip": {
|
"adm-zip": {
|
||||||
"version": "0.5.9",
|
"version": "0.5.10",
|
||||||
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
|
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz",
|
||||||
"integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg=="
|
"integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ=="
|
||||||
},
|
},
|
||||||
"agent-base": {
|
"agent-base": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
@@ -2243,9 +2243,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"follow-redirects": {
|
"follow-redirects": {
|
||||||
"version": "1.15.2",
|
"version": "1.15.3",
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
|
||||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
|
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q=="
|
||||||
},
|
},
|
||||||
"form-data": {
|
"form-data": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
@@ -2429,9 +2429,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"js-base64": {
|
"js-base64": {
|
||||||
"version": "3.7.2",
|
"version": "3.7.5",
|
||||||
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz",
|
||||||
"integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ=="
|
"integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA=="
|
||||||
},
|
},
|
||||||
"jsdom": {
|
"jsdom": {
|
||||||
"version": "22.1.0",
|
"version": "22.1.0",
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sasjs/cli": "^4.4.2",
|
"@sasjs/cli": "^4.11.1",
|
||||||
"@sasjs/core": "^4.46.4"
|
"@sasjs/core": "^4.47.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,21 +1,33 @@
|
|||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
@brief Checks the level of access a user has to the MP Editor
|
@brief Checks group access level for a table or library
|
||||||
@details In order for a user to be able to EDIT or APPROVE a table they must
|
@details In order for a user to be able to EDIT or APPROVE a table they must
|
||||||
be in a metadata group that has been granted access to that table in the
|
be in a group that has been granted access to that table in the
|
||||||
&mpelib..mpe_security table. Alternatively, they may be in the
|
MPE_SECURITY table. Alternatively, they may be in the &mpeadmins
|
||||||
&mpeadmins group (has overall access).
|
group (which has full access to everything).
|
||||||
|
|
||||||
|
@param [in] base_table The base table to check for
|
||||||
|
@param [in] user= The user for which the access level should be returned. If
|
||||||
|
not provided, the mf_user() result is used instead.
|
||||||
|
@param [in] access_level= (APPROVE) access_level (per MPE_SECURITY) reqd.
|
||||||
|
Valid values:
|
||||||
|
@li EDIT
|
||||||
|
@li APPROVE
|
||||||
|
@li VIEW
|
||||||
|
@param [in] cntl_lib_var= (MPELIB) The name of a global macro variable that
|
||||||
|
contains the libref in which the MPE_SECURITY table is stored
|
||||||
|
@param [out] outds= (MED_ACCESSCHECK) Output WORK table containing all the
|
||||||
|
groups for which the user is granted the particular ACCESS_LEVEL.
|
||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
@li mp_abort.sas
|
@li mp_abort.sas
|
||||||
|
@li mf_getuniquename.sas
|
||||||
|
@li mf_getuser.sas
|
||||||
@li mf_verifymacvars.sas
|
@li mf_verifymacvars.sas
|
||||||
@li mpe_getgroups.sas
|
@li mpe_getgroups.sas
|
||||||
@li mp_dropmembers.sas
|
|
||||||
|
|
||||||
@param [in] access_level= access_level (per &mpelib..mp_editor_security) reqd
|
<h4> Related Macros </h4>
|
||||||
|
@li mpe_accesscheck.test.sas
|
||||||
@returns outds A table containing all the groups that user is a member of,
|
|
||||||
which are granted the access_level requested.
|
|
||||||
|
|
||||||
@version 9.2
|
@version 9.2
|
||||||
@author 4GL Apps Ltd
|
@author 4GL Apps Ltd
|
||||||
@@ -25,65 +37,64 @@
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
%macro mpe_accesscheck(
|
%macro mpe_accesscheck(
|
||||||
base_table /* base table to check for */
|
base_table
|
||||||
,outds=med_accesscheck /* WORK table to contain access details */
|
,outds=med_accesscheck /* WORK table to contain access details */
|
||||||
,user= /* metadata user to check for */
|
,user= /* metadata user to check for */
|
||||||
,access_level=APPROVE
|
,access_level=APPROVE
|
||||||
|
,cntl_lib_var=MPELIB
|
||||||
);
|
);
|
||||||
|
|
||||||
%if &user= %then %let user=%mf_getuser();
|
%if &user= %then %let user=%mf_getuser();
|
||||||
|
|
||||||
%if %index(&outds,.) %then %do;
|
%mp_abort(
|
||||||
%local lib ds;
|
iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)
|
||||||
%let lib=%scan(&outds,1,.);
|
,mac=mpe_accesscheck
|
||||||
%let ds=%scan(&outds,2,.);
|
,msg=%str(outds should be a WORK table)
|
||||||
%if %upcase(&lib) ne WORK %then %do;
|
)
|
||||||
%mp_abort(msg=outds should be a WORK table
|
|
||||||
,mac=mpe_accesscheck);
|
|
||||||
%end;
|
|
||||||
%end;
|
|
||||||
%else %let ds=&outds;
|
|
||||||
|
|
||||||
%mp_abort(
|
%mp_abort(
|
||||||
iftrue=(%mf_verifymacvars(base_table user access_level)=0)
|
iftrue=(%mf_verifymacvars(base_table user access_level)=0)
|
||||||
,mac=bitemporal_dataloader
|
,mac=mpe_accesscheck
|
||||||
,msg=%str(Missing base_table/user access_level)
|
,msg=%str(Missing base_table/user access_level variables)
|
||||||
)
|
)
|
||||||
|
|
||||||
/* ensure any existing table is dropped */
|
/* make unique temp table vars */
|
||||||
%mp_dropmembers(&ds)
|
%local tempds1 tempds2;
|
||||||
|
%let tempds1=%mf_getuniquename(prefix=usergroups);
|
||||||
|
%let tempds2=%mf_getuniquename(prefix=tablegroups);
|
||||||
|
|
||||||
/* create a new table for temp use */
|
/* get list of user groups */
|
||||||
data; run;
|
%mpe_getgroups(user=&user,outds=&tempds1)
|
||||||
%local tempds; %let tempds=&syslast;
|
|
||||||
|
|
||||||
/* overwrite with the list of groups */
|
|
||||||
%mpe_getgroups(user=&user,outds=&tempds);
|
|
||||||
|
|
||||||
|
/* get list of groups with access for that table */
|
||||||
|
proc sql;
|
||||||
|
create table &tempds2 as
|
||||||
|
select distinct sas_group
|
||||||
|
from &&&cntl_lib_var...mpe_security
|
||||||
|
where &dc_dttmtfmt. lt tx_to
|
||||||
|
and access_level="&access_level"
|
||||||
|
and (
|
||||||
|
(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")
|
||||||
|
or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")
|
||||||
|
or (libref="*ALL*")
|
||||||
|
);
|
||||||
%if &_debug ge 131 %then %do;
|
%if &_debug ge 131 %then %do;
|
||||||
data _null_;
|
data _null_;
|
||||||
set &tempds;
|
set &tempds1;
|
||||||
|
putlog (_all_)(=);
|
||||||
|
run;
|
||||||
|
data _null_;
|
||||||
|
set &tempds2;
|
||||||
putlog (_all_)(=);
|
putlog (_all_)(=);
|
||||||
run;
|
run;
|
||||||
%end;
|
%end;
|
||||||
|
|
||||||
proc sql;
|
proc sql;
|
||||||
create table &outds as
|
create table &outds as
|
||||||
select * from &tempds
|
select * from &tempds1
|
||||||
where groupname="&mpeadmins"
|
where groupname="&mpeadmins"
|
||||||
or groupname in
|
or groupname in (select * from &tempds2);
|
||||||
(select sas_group from &mpelib..mpe_security
|
|
||||||
where &dc_dttmtfmt. lt tx_to
|
|
||||||
and access_level="&access_level"
|
|
||||||
& (
|
|
||||||
(libref="%scan(&base_table,1,.)" and dsn="%scan(&base_table,2,.)")
|
|
||||||
or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")
|
|
||||||
or (libref="*ALL*")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
%put base_table=&base_table;
|
%put &sysmacroname: base_table=&base_table;
|
||||||
%put libref=%scan(&base_table,1,.);
|
%put &sysmacroname: access_level=&access_level;
|
||||||
%put dsn=%scan(&base_table,2,.);
|
|
||||||
%put access_level=&access_level;
|
|
||||||
%mend mpe_accesscheck;
|
%mend mpe_accesscheck;
|
||||||
|
68
sas/sasjs/macros/mpe_accesscheck.test.sas
Normal file
68
sas/sasjs/macros/mpe_accesscheck.test.sas
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mpe_accesscheck macro
|
||||||
|
@details Checking functionality of mpe_accesscheck.sas macro
|
||||||
|
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_getuniquename.sas
|
||||||
|
@li mf_getuser.sas
|
||||||
|
@li mp_assertdsobs.sas
|
||||||
|
@li mpe_getgroups.sas
|
||||||
|
@li mpe_accesscheck.sas
|
||||||
|
|
||||||
|
|
||||||
|
@author 4GL Apps Ltd
|
||||||
|
@copyright 4GL Apps Ltd. This code may only be used within Data Controller
|
||||||
|
and may not be re-distributed or re-sold without the express permission of
|
||||||
|
4GL Apps Ltd.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/* get the groups this user is actually a member of */
|
||||||
|
%mpe_getgroups(user=%mf_getuser(),outds=work.groups)
|
||||||
|
|
||||||
|
data _null_;
|
||||||
|
set work.groups;
|
||||||
|
call symputx('groupname',groupname);
|
||||||
|
run;
|
||||||
|
|
||||||
|
/* create demo MPE_SECURITY table */
|
||||||
|
data work.mpe_security;
|
||||||
|
if 0 then set &dc_libref..mpe_security;
|
||||||
|
do access_level='EDIT','APPROVE','VIEW','SIGNOFF','AUDIT';
|
||||||
|
LIBREF='SOMELIB';
|
||||||
|
DSN='SOMEDS';
|
||||||
|
sas_group="&groupname";
|
||||||
|
tx_from=0;
|
||||||
|
tx_to='31dec4999:23:59:59'dt;
|
||||||
|
output;
|
||||||
|
end;
|
||||||
|
run;
|
||||||
|
|
||||||
|
%let WRK=WORK;
|
||||||
|
|
||||||
|
%mpe_accesscheck(
|
||||||
|
SOMELIB.SOMEDS
|
||||||
|
,outds=work.test1
|
||||||
|
,access_level=APPROVE
|
||||||
|
,cntl_lib_var=WRK
|
||||||
|
)
|
||||||
|
%mp_assertdsobs(work.test1,
|
||||||
|
desc=Test 1 - One record returned,
|
||||||
|
test=EQUALS 1,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
|
|
||||||
|
%mpe_accesscheck(
|
||||||
|
SOMELIB.INVALID
|
||||||
|
,outds=work.test2
|
||||||
|
,access_level=APPROVE
|
||||||
|
,cntl_lib_var=WRK
|
||||||
|
)
|
||||||
|
%mp_assertdsobs(work.test2,
|
||||||
|
desc=Test 12 - 0 records returned,
|
||||||
|
test=EQUALS 0,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
|
|
@@ -1014,7 +1014,8 @@ insert into &lib..mpe_selectbox set
|
|||||||
,buskey='LIBREF DSN ACCESS_LEVEL SAS_GROUP'
|
,buskey='LIBREF DSN ACCESS_LEVEL SAS_GROUP'
|
||||||
,var_txfrom='TX_FROM'
|
,var_txfrom='TX_FROM'
|
||||||
,var_txto='TX_TO'
|
,var_txto='TX_TO'
|
||||||
,notes='Shows which metadata groups can edit which tables'
|
,notes='Determines which groups can view/edit/approve which tables'
|
||||||
|
,post_edit_hook='services/hooks/mpe_security_postedit'
|
||||||
;
|
;
|
||||||
insert into &lib..mpe_tables
|
insert into &lib..mpe_tables
|
||||||
set tx_from=0
|
set tx_from=0
|
||||||
@@ -1351,6 +1352,15 @@ insert into &lib..MPE_VALIDATIONS set
|
|||||||
,rule_value='UPCASE'
|
,rule_value='UPCASE'
|
||||||
,rule_active=1
|
,rule_active=1
|
||||||
,tx_to='31DEC5999:23:59:59'dt;
|
,tx_to='31DEC5999:23:59:59'dt;
|
||||||
|
insert into &lib..MPE_VALIDATIONS set
|
||||||
|
tx_from=0
|
||||||
|
,base_lib="&lib"
|
||||||
|
,base_ds="MPE_SECURITY"
|
||||||
|
,base_col="LIBREF"
|
||||||
|
,rule_type='CASE'
|
||||||
|
,rule_value="UPCASE"
|
||||||
|
,rule_active=1
|
||||||
|
,tx_to='31DEC5999:23:59:59'dt;
|
||||||
insert into &lib..MPE_VALIDATIONS set
|
insert into &lib..MPE_VALIDATIONS set
|
||||||
tx_from=0
|
tx_from=0
|
||||||
,base_lib="&lib"
|
,base_lib="&lib"
|
||||||
@@ -1369,6 +1379,15 @@ insert into &lib..MPE_VALIDATIONS set
|
|||||||
,rule_value="&lib..MPE_TABLES.LIBREF"
|
,rule_value="&lib..MPE_TABLES.LIBREF"
|
||||||
,rule_active=1
|
,rule_active=1
|
||||||
,tx_to='31DEC5999:23:59:59'dt;
|
,tx_to='31DEC5999:23:59:59'dt;
|
||||||
|
insert into &lib..MPE_VALIDATIONS set
|
||||||
|
tx_from=0
|
||||||
|
,base_lib="&lib"
|
||||||
|
,base_ds="MPE_SECURITY"
|
||||||
|
,base_col="DSN"
|
||||||
|
,rule_type='CASE'
|
||||||
|
,rule_value="UPCASE"
|
||||||
|
,rule_active=1
|
||||||
|
,tx_to='31DEC5999:23:59:59'dt;
|
||||||
insert into &lib..MPE_VALIDATIONS set
|
insert into &lib..MPE_VALIDATIONS set
|
||||||
tx_from=0
|
tx_from=0
|
||||||
,base_lib="&lib"
|
,base_lib="&lib"
|
||||||
@@ -1733,12 +1752,12 @@ proc format library=&lib..mpe_x_catalog;
|
|||||||
6 = "Agree"
|
6 = "Agree"
|
||||||
7 = "Strongly Agree"
|
7 = "Strongly Agree"
|
||||||
;
|
;
|
||||||
VALUE LIKERT7_A
|
VALUE LIKERT7_ELEVEN
|
||||||
1,2,3 = "Disagree"
|
1,2,3 = "Disagree"
|
||||||
4 = "Neither Agree nor Disagree"
|
4 = "Neither Agree nor Disagree"
|
||||||
5,6,7 = "Agree"
|
5,6,7 = "Agree"
|
||||||
;
|
;
|
||||||
VALUE LIKERT7_B
|
VALUE LIKERT7_SISTERS
|
||||||
1-3 = "Disagree"
|
1-3 = "Disagree"
|
||||||
4 = "Neither Agree nor Disagree"
|
4 = "Neither Agree nor Disagree"
|
||||||
5-7 = "Agree"
|
5-7 = "Agree"
|
||||||
|
@@ -186,20 +186,15 @@ options notes mprint;
|
|||||||
libname approve "&dir";
|
libname approve "&dir";
|
||||||
|
|
||||||
/* take copy of webin file */
|
/* take copy of webin file */
|
||||||
|
|
||||||
data _null_;
|
data _null_;
|
||||||
if symexist('_WEBIN_FILEREF1')
|
if symexist('_WEBIN_FILEREF1') then ref=symget('_WEBIN_FILEREF1');
|
||||||
then ref=symget('_WEBIN_FILEREF1');
|
else if symexist('sasjs_tables') then ref='0ref'; /* no fileref created */
|
||||||
else if symexist('sasjs_tables') then do;
|
|
||||||
rc=filename('ref',"%sysfunc(pathname(work))/&dsn.csv");
|
|
||||||
ref='ref';
|
|
||||||
end;
|
|
||||||
else ref='indata1';
|
else ref='indata1';
|
||||||
call symputx('ref',ref);
|
call symputx('ref',ref);
|
||||||
putlog ref=;
|
putlog ref=;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
%mp_binarycopy(inref=&ref, outloc="&dir/_WEBIN_FILEREF1.txt")
|
%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)
|
||||||
|
|
||||||
|
|
||||||
/* take copy of macvars */
|
/* take copy of macvars */
|
||||||
|
34
sas/sasjs/services/hooks/mpe_security_postedit.sas
Normal file
34
sas/sasjs/services/hooks/mpe_security_postedit.sas
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Post Edit Hook script for the MPE_SECURITY table
|
||||||
|
@details Post edit hooks provide additional backend validation against
|
||||||
|
user-sourced data. The incoming dataset is always `work.staging_ds` and this
|
||||||
|
file is included from the mpe_loader.sas macro.
|
||||||
|
|
||||||
|
Available (at runtime) macro variables:
|
||||||
|
@li DC_LIBREF - The DC control library for your site
|
||||||
|
@li LIBREF - The library of the dataset being edited (is assigned)
|
||||||
|
@li DS - The dataset being edited
|
||||||
|
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/* ensure upcase and check access level values*/
|
||||||
|
%let errval=0;
|
||||||
|
%let errmsg=;
|
||||||
|
data work.staging_ds;
|
||||||
|
set work.staging_ds;
|
||||||
|
LIBREF=upcase(LIBREF);
|
||||||
|
DSN=upcase(DSN);
|
||||||
|
ACCESS_LEVEL=upcase(ACCESS_LEVEL);
|
||||||
|
if ACCESS_LEVEL not in ('EDIT','APPROVE','VIEW','SIGNOFF','AUDIT') then do;
|
||||||
|
putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;
|
||||||
|
call symputx('errval',1);
|
||||||
|
call symputx('errmsg',"Invalid ACCESS_LEVEL: "!!access_level);
|
||||||
|
end;
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mp_abort(iftrue=(&errval=1)
|
||||||
|
,mac=mpe_security_postedit.sas
|
||||||
|
,msg=%str(&errmsg)
|
||||||
|
)
|
Reference in New Issue
Block a user