Browse Source

添加用户持续越权鉴权规则

林倩 2 years ago
parent
commit
64189fcc95

+ 142 - 132
src/pages/log-manage/auth-risk-detection/detail.vue

@@ -1,151 +1,161 @@
 <template>
-    <div class="u-detail">
-        <el-form ref="ruleForm" label-width="90px" label-suffix=":">
-            <dg-row :gutter="20">
-                <dg-col :span="12">
-                    <el-form-item label="方案名称">
-                        <div class="u-detail__text">{{ sizeForm.name }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="12">
-                    <el-form-item label="方案状态">
-                        <div class="u-detail__text" v-translate="{ enum: 'ProgrammeStateEnum' }">{{ sizeForm.state }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="12">
-                    <el-form-item label="创建时间">
-                        <div class="u-detail__text">
-                            {{ sizeForm.createTime | dateFormatter("YYYY-MM-DD HH:mm:ss") }}
-                        </div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="24">
-                    <el-form-item label="检测规则">
-                        <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
-                            <p>
-                                鉴权时,必要条件不完整。
-                            </p>
-                            <div>
-                                鉴权类型:
-                                <dg-radio-group
-                                    v-model="form.authType"
-                                    enum="AuthenticationNecessaryParamEnum"
-                                    @change="setNecessaryParams"
-                                    call-off
-                                ></dg-radio-group>
-                            </div>
-                            <div class="form-inline">
-                                <label>必要参数:</label>
-                                <dg-checkbox-group
-                                    v-model="form.necessaryParams"
-                                    enum="AuthenticationNecessaryParamEnum"
-                                    disabled
-                                ></dg-checkbox-group>
-                            </div>
-                        </div>
-                        <div v-else>
-                            {{ ruleContent }}
-                        </div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="24">
-                    <el-form-item label="规则说明">
-                        <div class="u-detail__text">{{ sizeForm.ruleExplain }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="24">
-                    <el-form-item label="风险内容">
-                        <div class="u-detail__text">{{ sizeForm.contentFormat }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="24">
-                    <el-form-item label="处理意见">
-                        <div class="u-detail__text">{{ sizeForm.handleOpinion }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <div class="dg-layer-demo" v-footer>
-                <dg-button @click="handleClose">关闭</dg-button>
+  <div class="u-detail">
+    <el-form ref="ruleForm" label-width="90px" label-suffix=":">
+      <dg-row :gutter="20">
+        <dg-col :span="12">
+          <el-form-item label="方案名称">
+            <div class="u-detail__text">{{ sizeForm.name }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="12">
+          <el-form-item label="方案状态">
+            <div class="u-detail__text" v-translate="{ enum: 'ProgrammeStateEnum' }">{{ sizeForm.state }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="12">
+          <el-form-item label="创建时间">
+            <div class="u-detail__text">
+              {{ sizeForm.createTime | dateFormatter('YYYY-MM-DD HH:mm:ss') }}
             </div>
-        </el-form>
-    </div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="24">
+          <el-form-item label="检测规则">
+            <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
+              <p>鉴权时,必要条件不完整。</p>
+              <div>
+                鉴权类型:
+                <dg-radio-group
+                  v-model="form.authType"
+                  enum="AuthenticationNecessaryParamEnum"
+                  @change="setNecessaryParams"
+                  call-off
+                ></dg-radio-group>
+              </div>
+              <div class="form-inline">
+                <label>必要参数:</label>
+                <dg-checkbox-group
+                  v-model="form.necessaryParams"
+                  enum="AuthenticationNecessaryParamEnum"
+                  disabled
+                ></dg-checkbox-group>
+              </div>
+            </div>
+            <div v-else>
+              {{ ruleContent }}
+            </div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="24">
+          <el-form-item label="规则说明">
+            <div class="u-detail__text">{{ sizeForm.ruleExplain }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="24">
+          <el-form-item label="风险内容">
+            <div class="u-detail__text">{{ sizeForm.contentFormat }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="24">
+          <el-form-item label="处理意见">
+            <div class="u-detail__text">{{ sizeForm.handleOpinion }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <div class="dg-layer-demo" v-footer>
+        <dg-button @click="handleClose">关闭</dg-button>
+      </div>
+    </el-form>
+  </div>
 </template>
 
 <script>
 export default {
-    name: "auth-risk-detail",
-    props: {
-        sizeForm: {
-            type: Object,
-            required: true
-        }
-    },
-    data() {
-        return {
-            form: {
-                necessaryParams: "",
-                authType: ""
-            },
-            ruleContent: "",
-            necessaryParams: []
-        };
+  name: 'auth-risk-detail',
+  props: {
+    sizeForm: {
+      type: Object,
+      required: true
+    }
+  },
+  data() {
+    return {
+      form: {
+        necessaryParams: '',
+        authType: ''
+      },
+      ruleContent: '',
+      necessaryParams: []
+    };
+  },
+  methods: {
+    ruleText() {
+      let str = '';
+      const { type } = this.sizeForm;
+      if (this.sizeForm.type === 'DSJPFJQFX') {
+        str = '分钟内,鉴权次数超过';
+      } else if (type === 'DSJPFHBMDMZFX') {
+        str = '分钟内,命中红/白名单超过';
+      } else if (type === 'YHCXYQFWFX') {
+        str = '分钟内,持续越权访问超过';
+      }
+      return str;
     },
-    methods: {
-        init() {
-            if (this.sizeForm.type === "JQBYTJBWZFX") {
-                this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
-                if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
-                    this.form.authType = this.necessaryParams[0].type;
-                    this.setNecessaryParams(this.form.authType);
-                }
-                return;
-            }
-            const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
-            const text = this.sizeForm.type === "DSJPFJQFX" ? "分钟内,鉴权次数超过" : "分钟内,命中红/白名单超过";
-            this.ruleContent = interval + text + frequency + "次";
-        },
-        handleClose() {
-            this.$emit("close");
-        },
-        setNecessaryParams(key) {
-            const seleted = this.necessaryParams.find(item => item.type === key);
-            if (seleted) {
-                this.form.necessaryParams = seleted.params
-                    .map(item => {
-                        return item.name;
-                    })
-                    .join(",");
-            }
+    init() {
+      if (this.sizeForm.type === 'JQBYTJBWZFX') {
+        this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
+        if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
+          this.form.authType = this.necessaryParams[0].type;
+          this.setNecessaryParams(this.form.authType);
         }
+        return;
+      }
+      const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
+      const text = this.ruleText();
+      this.ruleContent = interval + text + frequency + '次';
+    },
+    handleClose() {
+      this.$emit('close');
     },
-    created() {
-        this.init();
+    setNecessaryParams(key) {
+      const seleted = this.necessaryParams.find((item) => item.type === key);
+      if (seleted) {
+        this.form.necessaryParams = seleted.params
+          .map((item) => {
+            return item.name;
+          })
+          .join(',');
+      }
     }
+  },
+  created() {
+    this.init();
+  }
 };
 </script>
 
 <style lang="scss">
 .u-detail {
-    .el-form-item {
-        margin-bottom: 10px;
-    }
+  .el-form-item {
+    margin-bottom: 10px;
+  }
 }
 .form-inline {
-    display: flex;
-    label {
-        min-width: 5.4em;
-    }
+  display: flex;
+  label {
+    min-width: 5.4em;
+  }
 }
 </style>

+ 180 - 181
src/pages/log-manage/auth-risk-detection/edit.vue

@@ -1,84 +1,75 @@
 <template>
-    <div>
-        <el-form
-            ref="ruleForm"
-            :rules="rules"
-            :model="sizeForm"
-            label-suffix=":"
-            label-position="right"
-            label-width="90px"
-        >
-            <dg-row>
-                <dg-col :span="12">
-                    <el-form-item label="方案名称" prop="name">
-                        {{ sizeForm.name }}
-                        <!-- <el-input
+  <div>
+    <el-form ref="ruleForm" :rules="rules" :model="sizeForm" label-suffix=":" label-position="right" label-width="90px">
+      <dg-row>
+        <dg-col :span="12">
+          <el-form-item label="方案名称" prop="name">
+            {{ sizeForm.name }}
+            <!-- <el-input
                             v-model.trim="sizeForm.name"
                             show-word-limit
                             placeholder="请输入方案名称"
                             clearable
                             disabled
                         /> -->
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="12">
-                    <el-form-item label="方案状态" prop="state">
-                        <dg-select
-                            style="width: 100%;"
-                            v-model="sizeForm.state"
-                            placeholder="请选择方案状态"
-                            enum="ProgrammeStateEnum"
-                        >
-                        </dg-select>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="24">
-                    <el-form-item label="检测规则" prop="ruleContent">
-                        <!-- DSJPFJQFX    DSJPFHBMDMZFX JQBYTJBWZFX -->
-                        <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
-                            <p>
-                                鉴权时,必要条件不完整。
-                            </p>
-                            <div>
-                                鉴权类型:
-                                <dg-radio-group
-                                    v-model="sizeForm.authType"
-                                    enum="AuthenticationNecessaryParamEnum"
-                                    @change="setNecessaryParams"
-                                    call-off
-                                ></dg-radio-group>
-                            </div>
-                            <div class="form-inline">
-                                <label>必要参数:</label>
-                                <dg-checkbox-group
-                                    v-model="sizeForm.necessaryParams"
-                                    enum="AuthenticationNecessaryParamEnum"
-                                    disabled
-                                ></dg-checkbox-group>
-                            </div>
-                        </div>
-                        <div v-else class="form-inline">
-                            <el-form-item label="" prop="interval">
-                                <el-input style="width: 80px;" v-model.trim="sizeForm.interval"></el-input>
-                            </el-form-item>
-                            &nbsp;{{ ruleText }}&nbsp;
-                            <el-form-item label="" prop="frequency"
-                                ><el-input style="width: 80px;" v-model.trim="sizeForm.frequency"></el-input>
-                            </el-form-item>
-                            &nbsp;次
-                        </div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="24">
-                    <el-form-item label="规则说明" prop="ruleExplain">
-                        {{ sizeForm.ruleExplain }}
-                        <!-- <el-input
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="12">
+          <el-form-item label="方案状态" prop="state">
+            <dg-select
+              style="width: 100%"
+              v-model="sizeForm.state"
+              placeholder="请选择方案状态"
+              enum="ProgrammeStateEnum"
+            >
+            </dg-select>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="24">
+          <el-form-item label="检测规则" prop="ruleContent">
+            <!-- DSJPFJQFX    DSJPFHBMDMZFX JQBYTJBWZFX -->
+            <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
+              <p>鉴权时,必要条件不完整。</p>
+              <div>
+                鉴权类型:
+                <dg-radio-group
+                  v-model="sizeForm.authType"
+                  enum="AuthenticationNecessaryParamEnum"
+                  @change="setNecessaryParams"
+                  call-off
+                ></dg-radio-group>
+              </div>
+              <div class="form-inline">
+                <label>必要参数:</label>
+                <dg-checkbox-group
+                  v-model="sizeForm.necessaryParams"
+                  enum="AuthenticationNecessaryParamEnum"
+                  disabled
+                ></dg-checkbox-group>
+              </div>
+            </div>
+            <div v-else class="form-inline">
+              <el-form-item label="" prop="interval">
+                <el-input style="width: 80px" v-model.trim="sizeForm.interval"></el-input>
+              </el-form-item>
+              &nbsp;{{ ruleText }}&nbsp;
+              <el-form-item label="" prop="frequency"
+                ><el-input style="width: 80px" v-model.trim="sizeForm.frequency"></el-input>
+              </el-form-item>
+              &nbsp;次
+            </div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="24">
+          <el-form-item label="规则说明" prop="ruleExplain">
+            {{ sizeForm.ruleExplain }}
+            <!-- <el-input
                             type="textarea"
                             rows="4"
                             v-model.trim="sizeForm.ruleExplain"
@@ -88,128 +79,136 @@
                             disabled
                             maxlength="500"
                         /> -->
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="24">
-                    <el-form-item label="风险内容" prop="contentFormat">
-                        {{ sizeForm.contentFormat }}
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="24">
-                    <el-form-item label="处理意见" prop="handleOpinion">
-                        <el-input
-                            type="textarea"
-                            rows="4"
-                            v-model.trim="sizeForm.handleOpinion"
-                            placeholder="请输入处理意见"
-                            clearable
-                            show-word-limit
-                            maxlength="500"
-                        />
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-        </el-form>
-        <div class="dg-layer-demo" v-footer>
-            <dg-button @click="handleClose">取消</dg-button>
-            <dg-button type="primary" @click="handlSave">保存</dg-button>
-        </div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="24">
+          <el-form-item label="风险内容" prop="contentFormat">
+            {{ sizeForm.contentFormat }}
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="24">
+          <el-form-item label="处理意见" prop="handleOpinion">
+            <el-input
+              type="textarea"
+              rows="4"
+              v-model.trim="sizeForm.handleOpinion"
+              placeholder="请输入处理意见"
+              clearable
+              show-word-limit
+              maxlength="500"
+            />
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+    </el-form>
+    <div class="dg-layer-demo" v-footer>
+      <dg-button @click="handleClose">取消</dg-button>
+      <dg-button type="primary" @click="handlSave">保存</dg-button>
     </div>
+  </div>
 </template>
 
 <script>
-import { saveAuthRisk } from "@/api/log-manage";
+import { saveAuthRisk } from '@/api/log-manage';
 
 export default {
-    name: "auth-risk-edit",
-    props: {
-        formData: Object
-    },
-    computed: {
-        ruleText() {
-            if (this.sizeForm.type === "DSJPFJQFX") return "分钟内,鉴权次数超过";
-            return "分钟内,命中红/白名单超过";
+  name: 'auth-risk-edit',
+  props: {
+    formData: Object
+  },
+  computed: {
+    ruleText() {
+      let str = '';
+      const { type } = this.sizeForm;
+      if (this.sizeForm.type === 'DSJPFJQFX') {
+        str = '分钟内,鉴权次数超过';
+      } else if (type === 'DSJPFHBMDMZFX') {
+        str = '分钟内,命中红/白名单超过';
+      } else if (type === 'YHCXYQFWFX') {
+        str = '分钟内,持续越权访问超过';
+      }
+      return str
+    }
+  },
+  data() {
+    return {
+      necessaryParams: [],
+      sizeForm: {
+        interval: '',
+        frequency: '',
+        authType: '',
+        necessaryParams: ''
+      },
+      rules: {
+        handleOpinion: [{ required: true, message: '请输入处理意见', trigger: 'blur' }],
+        name: [{ required: true, message: '请输入方案名称', trigger: 'blur' }],
+        interval: [{ required: true, message: '请输入分钟数', trigger: 'blur' }],
+        frequency: [{ required: true, message: '请输入次数', trigger: 'blur' }],
+        state: [{ required: true, message: '请选择方案状态', trigger: 'blur' }],
+        ruleContent: [{ required: true }]
+      }
+    };
+  },
+  methods: {
+    init() {
+      this.sizeForm = Object.assign({}, this.formData, this.sizeForm);
+      if (this.sizeForm.type === 'JQBYTJBWZFX') {
+        this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
+        if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
+          this.sizeForm.authType = this.necessaryParams[0].type;
+          this.setNecessaryParams(this.sizeForm.authType);
         }
+        return;
+      }
+      const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
+      this.sizeForm.interval = interval;
+      this.sizeForm.frequency = frequency;
     },
-    data() {
-        return {
-            necessaryParams: [],
-            sizeForm: {
-                interval: "",
-                frequency: "",
-                authType: "",
-                necessaryParams: ""
-            },
-            rules: {
-                handleOpinion: [{ required: true, message: "请输入处理意见", trigger: "blur" }],
-                name: [{ required: true, message: "请输入方案名称", trigger: "blur" }],
-                interval: [{ required: true, message: "请输入分钟数", trigger: "blur" }],
-                frequency: [{ required: true, message: "请输入次数", trigger: "blur" }],
-                state: [{ required: true, message: "请选择方案状态", trigger: "blur" }],
-                ruleContent: [{ required: true }]
-            }
-        };
+    setNecessaryParams(key) {
+      const seleted = this.necessaryParams.find((item) => item.type === key);
+      if (seleted) {
+        this.sizeForm.necessaryParams = seleted.params
+          .map((item) => {
+            return item.name;
+          })
+          .join(',');
+      }
     },
-    methods: {
-        init() {
-            this.sizeForm = Object.assign({}, this.formData, this.sizeForm);
-            if (this.sizeForm.type === "JQBYTJBWZFX") {
-                this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
-                if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
-                    this.sizeForm.authType = this.necessaryParams[0].type;
-                    this.setNecessaryParams(this.sizeForm.authType);
-                }
-                return;
-            }
-            const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
-            this.sizeForm.interval = interval;
-            this.sizeForm.frequency = frequency;
-        },
-        setNecessaryParams(key) {
-            const seleted = this.necessaryParams.find(item => item.type === key);
-            if (seleted) {
-                this.sizeForm.necessaryParams = seleted.params
-                    .map(item => {
-                        return item.name;
-                    })
-                    .join(",");
-            }
-        },
-        handleClose() {
-            this.$emit("close");
-        },
-        async handlSave() {
-            const that = this;
-            const valid = await new Promise(resolve => this.$refs.ruleForm.validate(resolve));
-            if (!valid) return;
-
-            const sizeForm = { ...this.sizeForm };
-            if (["DSJPFHBMDMZFX", "DSJPFJQFX"].includes(this.sizeForm.type)) {
-                sizeForm.ruleContent = JSON.stringify({ frequency: sizeForm.frequency, interval: sizeForm.interval });
-            }
-            saveAuthRisk(sizeForm.id, sizeForm)
-                .then(() => {
-                    that.handleClose(true);
-                    that.$message.success("保存成功");
-                })
-                .catch(error => that.$message.error(error))
-        }
+    handleClose() {
+      this.$emit('close');
     },
-    created() {
-        this.init();
+    async handlSave() {
+      const that = this;
+      const valid = await new Promise((resolve) => this.$refs.ruleForm.validate(resolve));
+      if (!valid) return;
+
+      const sizeForm = { ...this.sizeForm };
+      if (['DSJPFHBMDMZFX', 'DSJPFJQFX', 'YHCXYQFWFX'].includes(this.sizeForm.type)) {
+        sizeForm.ruleContent = JSON.stringify({ frequency: sizeForm.frequency, interval: sizeForm.interval });
+      }
+      saveAuthRisk(sizeForm.id, sizeForm)
+        .then(() => {
+          that.handleClose(true);
+          that.$message.success('保存成功');
+        })
+        .catch((error) => that.$message.error(error));
     }
+  },
+  created() {
+    this.init();
+  }
 };
 </script>
 
 <style lang="scss" scoped>
 .form-inline {
-    display: flex;
-    label {
-        min-width: 5.4em;
-    }
+  display: flex;
+  label {
+    min-width: 5.4em;
+  }
 }
 </style>