|
@@ -1,6 +1,8 @@
|
|
|
package com.gxzc.zen.umps.util
|
|
|
|
|
|
import com.gxzc.zen.umps.common.Permission
|
|
|
+import org.slf4j.LoggerFactory
|
|
|
+import org.springframework.util.Assert
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -9,33 +11,63 @@ import com.gxzc.zen.umps.common.Permission
|
|
|
* @url https://noahlan.com
|
|
|
*/
|
|
|
object PermissionUtil {
|
|
|
-
|
|
|
- fun convertPermission(perms: HashSet<String>): HashSet<Permission> {
|
|
|
- val result = hashSetOf<Permission>()
|
|
|
- perms.forEach()
|
|
|
- }
|
|
|
-
|
|
|
+ private val logger = LoggerFactory.getLogger(PermissionUtil::class.java)
|
|
|
|
|
|
/**
|
|
|
* 权限判定
|
|
|
- * @param needPerm 需要的权限
|
|
|
+ * @param needPermString 需要的权限
|
|
|
* @param userPerm 用户权限列表
|
|
|
*/
|
|
|
- fun isPermitted(needPerm: String?, userPerm: String?): Boolean {
|
|
|
- if (needPerm.isNullOrEmpty()) {
|
|
|
- return true
|
|
|
- }
|
|
|
- if (userPerm.isNullOrEmpty()) {
|
|
|
+ fun isPermitted(needPermString: String, userPerm: HashSet<String>): Boolean {
|
|
|
+ try {
|
|
|
+ assertPermissionString(needPermString)
|
|
|
+ val userPermSet = convertToPermissionSet(userPerm)
|
|
|
+ val needPerm = convertToPermission(needPermString)
|
|
|
+ // 验证逻辑 platformId=0 为通用(超级)权限
|
|
|
+ userPermSet
|
|
|
+ .filter { it.perm == needPerm.perm && verifyCRUD(needPerm.crud, it.crud) }
|
|
|
+ .forEach {
|
|
|
+ // 验证平台
|
|
|
+ return if (it.platformId == 0) {
|
|
|
+ true
|
|
|
+ } else {
|
|
|
+ it.platformId == needPerm.platformId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (e: RuntimeException) {
|
|
|
+ logger.error("权限验证系统错误...", e)
|
|
|
return false
|
|
|
}
|
|
|
- val needCRUD = needPerm!!.substring(needPerm.lastIndexOf(':'))
|
|
|
- val userCRUD = userPerm!!.substring(userPerm.lastIndexOf(':'))
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun verifyCRUD(needCRUD: String, userCRUD: String): Boolean {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量将权限串转换为权限实体
|
|
|
+ */
|
|
|
+ private fun convertToPermissionSet(perms: HashSet<String>): HashSet<Permission> {
|
|
|
+ val result = hashSetOf<Permission>()
|
|
|
+ perms.forEach({
|
|
|
+ result.add(convertToPermission(it))
|
|
|
+ })
|
|
|
+ return result
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将权限串转换为权限实体
|
|
|
+ */
|
|
|
+ private fun convertToPermission(str: String): Permission {
|
|
|
+ return Permission(str)
|
|
|
+ }
|
|
|
|
|
|
- for (item in needCRUD) {
|
|
|
- if (item !in userCRUD) {
|
|
|
- return false
|
|
|
- }
|
|
|
+ private fun assertPermissionString(str: String) {
|
|
|
+ Assert.notNull(str, "Permission string not be null.")
|
|
|
+ val splitList = str.split(':')
|
|
|
+ if (splitList.size < 3) {
|
|
|
+ throw RuntimeException("permission字符串错误,必须为:分割且长度等于3")
|
|
|
}
|
|
|
- return true
|
|
|
}
|
|
|
}
|