MyBatis 3 adapter for Casbin

Clone this repo:
  1. ec9a458 feat: add conditionsToMyBatisQuery() API for dynamic policy queries (#18) by Yang Luo · 4 weeks ago master v1.4.0
  2. 18f6b0e feat: remove codebeat badge in README by Yang Luo · 4 weeks ago v1.3.0
  3. 798859a feat: modify GPG signature generation in pom.xml (#14) by Liao Xin · 1 year, 5 months ago v1.2.0
  4. 385439c feat: improve README.md by Yang Luo · 1 year, 5 months ago v1.1.0
  5. ebcbe54 feat: add maven-settings.xml to fix CI error (#13) by Liao Xin · 1 year, 5 months ago v1.0.0

mybatis-adapter

build codecov javadoc Maven Central Discord

Mybatis Adapter is the Mybatis adapter for jCasbin, which provides interfaces for loading policies from Mybatis and saving policies to it.

Installation

<dependency>
    <groupId>org.casbin</groupId>
    <artifactId>mybatis-adapter</artifactId>
    <version>version</version>
</dependency>

Example

package com.company.example;

import org.casbin.jcasbin.main.Enforcer;
import org.casbin.jcasbin.util.Util;
import org.casbin.adapter.MybatisAdapter;

public class Example {
    public void test() {
        Enforcer e = new Enforcer("examples/rbac_model.conf", "examples/rbac_policy.csv");
    
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/tbl";
        String username = "YourUsername";
        String password = "YourPassword";
        
        MybatisAdapter a = new MybatisAdapter(driver, url, username, password, true);
    
        // Save policy to DB
        a.savePolicy(e.getModel());
    
        // Load policy from DB
        a.loadPolicy(e.getModel());
    }
}

ConditionsToMyBatisQuery

conditionsToMyBatisQuery() is a function that converts multiple query conditions into a MyBatis query statement. You can use the GetAllowedObjectConditions() API of Casbin to get conditions, and choose the way of combining conditions through CombineType.

conditionsToMyBatisQuery() allows Casbin to be combined with SQL, and you can use it to implement many functions.

Security Note: This API executes SQL conditions directly. Ensure that conditions are generated by Casbin's GetAllowedObjectConditions() or other trusted sources, not from untrusted user input, to prevent SQL injection attacks.

Example

package com.company.example;

import org.casbin.jcasbin.main.Enforcer;
import org.casbin.adapter.MybatisAdapter;
import org.casbin.adapter.CombineType;
import org.casbin.adapter.CasbinRule;
import java.util.List;
import java.util.ArrayList;

public class ConditionsExample {
    public void test() {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/casbin";
        String username = "YourUsername";
        String password = "YourPassword";
        
        MybatisAdapter a = new MybatisAdapter(driver, url, username, password, true);
        Enforcer e = new Enforcer("examples/rbac_model.conf", a);
        
        // Get allowed object conditions from Casbin
        // For example: ["category_id = 1", "author = 'alice'"]
        List<String> conditions = new ArrayList<>();
        conditions.add("v0 = 'alice'");
        conditions.add("v1 = 'data1'");
        
        // Combine conditions with OR
        List<CasbinRule> resultsOr = a.conditionsToMyBatisQuery(conditions, CombineType.OR);
        // SQL: SELECT * FROM casbin_rule WHERE (v0 = 'alice') OR (v1 = 'data1')
        
        // Combine conditions with AND
        List<CasbinRule> resultsAnd = a.conditionsToMyBatisQuery(conditions, CombineType.AND);
        // SQL: SELECT * FROM casbin_rule WHERE (v0 = 'alice') AND (v1 = 'data1')
        
        // Process results
        for (CasbinRule rule : resultsOr) {
            System.out.println(rule.toString());
        }
    }
}

Getting Help

License

This project is under Apache 2.0 License. See the LICENSE file for the full license text.