All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.jerrymice.permission.engine.PermissionEngine Maven / Gradle / Ivy

The newest version!
package com.github.jerrymice.permission.engine;

import com.github.jerrymice.permission.resource.Property;

import java.util.Map;
import java.util.Set;

/**
 * @author tumingjian
 * 说明:权限脚本引擎接口类.
 */
public interface PermissionEngine {
    /**
     * extendData()方法中的数据都会赋值到JS的这个变量下
     */
    String EXTEND_VARIABLE_NAME="E";
    /**
     * user,resources,characters方法返回的数据都会赋值到JS的这个变量下.
     * P['U'] 或 P.U 当前用户
     * P['R']  或 P.R 当前用户所拥有的资源
     * P['C']  或 P.C 当前用户所拥有的角色
     */
    String PERMISSION_VARIABLE_NAME ="P";
    /**
     * 返回当前用户
     *
     * @return 当前用户实体
     */
    Set user();

    /**
     * 返回当前用户所拥有的资源
     *
     * @return 当前用户资源列表
     */
    Set resources();

    /**
     * 返回当前用户所拥有的角色信息
     *
     * @return 当前用户角色列表
     */
    Set characters();

    /**
     * 返回当前用户添加的额外数据变量map
     *
     * @return 当前用户扩展数据
     */
    Map extendData();

    /**
     * 判断资源中是否存在某个资源值.
     *
     * @param value 资源在Engine中的唯一值
     * @return 返回true 或 false
     */
    boolean contain(String value);

    /**
     * 在js中执行一个bool表达式,js返回值如果返回:null,'null',false,0,undefined 字符串 那么java将返回false
     *
     * @param expression 要执行的js表达式
     * @return 返回true 或 false
     */
    boolean bool(String expression);

    /**
     * 执行表达式并返回结果
     * @param expression 表达式
     * @return 返回值
     */
    Object eval(String expression);

    /**
     * 在脚本中中定义一个变量
     * @param name  变量名
     * @param value 变量的值
     */
    void put(String name,Object value);
    /**
     * 验证表达式类型.
     *
     * @param value  脚本表达式或普通字符
     * @return  普通文本返回0,脚本表达式返回1
     */
    default int type(String value) {
        final String bracket="[";
        final String dot=".";
        if (value == null || value.trim() == "") {
            return 0;
        }
        if (value.equalsIgnoreCase(Boolean.TRUE.toString()) || value.equalsIgnoreCase(Boolean.FALSE.toString())) {
            throw new PermissionException(new IllegalArgumentException("permission eval 'true' is retention key word"));
        }
        if (value.contains(PERMISSION_VARIABLE_NAME +bracket) || value.contains(EXTEND_VARIABLE_NAME+bracket) || value.contains(PERMISSION_VARIABLE_NAME +dot) || value.contains(EXTEND_VARIABLE_NAME+dot)) {
            return 1;
        }
        return 0;
    }

    /**
     * 释放引擎
     */
    default void release(){

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy