diff --git a/.gitignore b/.gitignore index 11c17723..43671e79 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,6 @@ yarn-error.log* .idea/ *.iml + +# temp floder for test +/temp/ diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..b2095be8 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "semi": false, + "singleQuote": true +} diff --git a/docs/Adapters.mdx b/docs/Adapters.mdx index dccf89bd..95516f23 100644 --- a/docs/Adapters.mdx +++ b/docs/Adapters.mdx @@ -17,202 +17,85 @@ A complete list of Casbin adapters is provided as below. Any 3rd-party contribut ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|-----------------------------------------------------------------------------------------|----------|----------------------------------------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [Filtered File Adapter (built-in)](/docs/policy-subset-loading) | File | [@faceless-saint](https://github.com/faceless-saint) | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files with policy subset loading support | -| [SQL Adapter](https://github.com/Blank-Xu/sql-adapter) | SQL | [@Blank-Xu](https://github.com/Blank-Xu) | ✅ | MySQL, PostgreSQL, SQL Server, SQLite3 are supported in `master` branch and Oracle is supported in `oracle` branch by `database/sql` | -| [Xorm Adapter](https://github.com/casbin/xorm-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, TiDB, SQLite, SQL Server, Oracle are supported by [Xorm](https://github.com/go-xorm/xorm/) | -| [GORM Adapter](https://github.com/casbin/gorm-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3, SQL Server are supported by [GORM](https://github.com/go-gorm/gorm) | -| [GORM Adapter Ex](https://github.com/casbin/gorm-adapter-ex) | ORM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3, SQL Server are supported by [GORM](https://github.com/go-gorm/gorm) | -| [Ent Adapter](https://github.com/casbin/ent-adapter) | ORM | Casbin | ✅ | MySQL, MariaDB, PostgreSQL, SQLite, Gremlin-based graph databases are supported by [ent ORM](https://entgo.io/) | -| [Beego ORM Adapter](https://github.com/casbin/beego-orm-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3 are supported by [Beego ORM](https://beego.wiki/docs/mvc/model/overview/) | -| [SQLX Adapter](https://github.com/memwey/casbin-sqlx-adapter) | ORM | [@memwey](https://github.com/memwey) | ✅ | MySQL, PostgreSQL, SQLite, Oracle are supported by [SQLX](https://github.com/jmoiron/sqlx) | -| [Sqlx Adapter](https://github.com/Blank-Xu/sqlx-adapter) | ORM | [@Blank-Xu](https://github.com/Blank-Xu) | ✅ | MySQL, PostgreSQL, SQL Server, SQLite3 are supported in `master` branch and Oracle is supported in `oracle` branch by [sqlx](https://github.com/jmoiron/sqlx) | -| [GF ORM Adapter](https://github.com/vance-liu/gdb-adapter) | ORM | [@vance-liu](https://github.com/vance-liu) | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://github.com/gogf/gf/tree/master/contrib/drivers) | -| [GoFrame ORM Adapter](https://github.com/kotlin2018/adapter) | ORM | [@kotlin2018](https://github.com/kotlin2018) | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://github.com/gogf/gf/tree/master/contrib/drivers) | -| [gf-adapter](https://github.com/zcyc/gf-adapter) | ORM | [@zcyc](https://github.com/zcyc) | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://github.com/gogf/gf/tree/master/contrib/drivers) | -| [Gdb Adapter](https://github.com/jxo-me/gdb-adapter) | ORM | [@jxo-me](https://github.com/jxo-me) | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://github.com/gogf/gf/tree/master/contrib/drivers) | -| [GoFrame V2 Adapter](https://github.com/hailaz/gf-casbin-adapter) | ORM | [@hailaz](https://github.com/hailaz) | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://goframe.org/pages/viewpage.action?pageId=1114686) | -| [Filtered PostgreSQL Adapter](https://github.com/casbin/casbin-pg-adapter) | SQL | Casbin | ✅ | For [PostgreSQL](https://www.postgresql.org/) | -| [Filtered pgx Adapter](https://github.com/pckhoi/casbin-pgx-adapter) | SQL | [@pckhoi](https://github.com/pckhoi) | ✅ | PostgreSQL is supported by [pgx](https://github.com/jackc/pgx) | -| [PostgreSQL Adapter](https://github.com/cychiuae/casbin-pg-adapter) | SQL | [@cychiuae](https://github.com/cychiuae) | ✅ | For [PostgreSQL](https://www.postgresql.org/) | -| [RQLite Adapter](https://github.com/edomosystems/rqlite-adapter) | SQL | [EDOMO Systems](https://github.com/edomosystems) | ✅ | For [RQLite](https://github.com/rqlite/rqlite/) | -| [MongoDB Adapter](https://github.com/casbin/mongodb-adapter) | NoSQL | Casbin | ✅ | For [MongoDB](https://www.mongodb.com) based on [MongoDB Go Driver](https://github.com/mongodb/mongo-go-driver) | -| [RethinkDB Adapter](https://github.com/adityapandey9/rethinkdb-adapter) | NoSQL | [@adityapandey9](https://github.com/adityapandey9) | ✅ | For [RethinkDB](https://rethinkdb.com/) | -| [Cassandra Adapter](https://github.com/casbin/cassandra-adapter) | NoSQL | Casbin | ❌ | For [Apache Cassandra DB](http://cassandra.apache.org) | -| [DynamoDB Adapter](https://github.com/HOOQTV/dynacasbin) | NoSQL | [HOOQ](https://github.com/HOOQTV) | ❌ | For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | -| [Dynacasbin](https://github.com/NewbMiao/dynacasbin) | NoSQL | [NewbMiao](https://github.com/NewbMiao) | ✅ | For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | -| [ArangoDB Adapter](https://github.com/adamwasila/arangodb-adapter) | NoSQL | [@adamwasila](https://github.com/adamwasila) | ✅ | For [ArangoDB](https://www.arangodb.com/) | -| [Amazon S3 Adapter](https://github.com/Soluto/casbin-minio-adapter) | Cloud | [Soluto](https://github.com/Soluto) | ❌ | For [Minio](https://github.com/minio/minio) and [Amazon S3](https://aws.amazon.com/s3/) | -| [Go CDK Adapter](https://github.com/bartventer/casbin-go-cloud-adapter) | Cloud | [@bartventer](https://github.com/bartventer) | ✅ | Adapter based on [Go Cloud Dev Kit](https://gocloud.dev/) that supports: Amazon DynamoDB, Azure CosmosDB, GCP Firestore, MongoDB, In-Memory | -| [Azure Cosmos DB Adapter](https://github.com/spacycoder/cosmos-casbin-adapter) | Cloud | [@spacycoder](https://github.com/spacycoder) | ✅ | For [Microsoft Azure Cosmos DB](https://docs.microsoft.com/en-us/azure/cosmos-db/introduction) | -| [GCP Firestore Adapter](https://github.com/reedom/casbin-firestore-adapter) | Cloud | [@reedom](https://github.com/reedom) | ❌ | For [Google Cloud Platform Firestore](https://cloud.google.com/firestore/) | -| [GCP Cloud Storage Adapter](https://github.com/qurami/casbin-cloud-storage-adapter) | Cloud | [qurami](https://github.com/qurami) | ❌ | For [Google Cloud Platform Cloud Storage](https://cloud.google.com/storage/) | -| [GCP Cloud Spanner Adapter](https://github.com/flowerinthenight/casbin-spanner-adapter) | Cloud | [@flowerinthenight](https://github.com/flowerinthenight) | ✅ | For [Google Cloud Platform Cloud Spanner](https://cloud.google.com/spanner/) | -| [Consul Adapter](https://github.com/ankitm123/consul-adapter) | KV store | [@ankitm123](https://github.com/ankitm123) | ❌ | For [HashiCorp Consul](https://www.consul.io/) | -| [Redis Adapter (Redigo)](https://github.com/casbin/redis-adapter) | KV store | Casbin | ✅ | For [Redis](https://redis.io/) | -| [Redis Adapter (go-redis)](https://github.com/mlsen/casbin-redis-adapter) | KV store | [@mlsen](https://github.com/mlsen) | ✅ | For [Redis](https://redis.io/) | -| [Etcd Adapter](https://github.com/sebastianliu/etcd-adapter) | KV store | [@sebastianliu](https://github.com/sebastianliu) | ❌ | For [etcd](https://github.com/coreos/etcd) | -| [BoltDB Adapter](https://github.com/speza/casbin-bolt-adapter) | KV store | [@speza](https://github.com/speza) | ✅ | For [Bolt](https://github.com/boltdb/bolt) | -| [Bolt Adapter](https://github.com/wirepair/bolt-adapter) | KV store | [@wirepair](https://github.com/wirepair) | ❌ | For [Bolt](https://github.com/boltdb/bolt) | -| [BadgerDB Adapter](https://github.com/inits/casbin-badgerdb-adapter) | KV store | [@inits](https://github.com/inits) | ✅ | For [BadgerDB](https://github.com/dgraph-io/badger) | -| [Protobuf Adapter](https://github.com/casbin/protobuf-adapter) | Stream | Casbin | ❌ | For [Google Protocol Buffers](https://developers.google.com/protocol-buffers/) | -| [JSON Adapter](https://github.com/casbin/json-adapter) | String | Casbin | ❌ | For [JSON](https://www.json.org/) | -| [String Adapter](https://github.com/qiangmzsx/string-adapter) | String | [@qiangmzsx](https://github.com/qiangmzsx) | ❌ | For String | -| [HTTP File Adapter](https://github.com/h4ckedneko/casbin-httpfs) | HTTP | [@h4ckedneko](https://github.com/h4ckedneko) | ❌ | For [http.FileSystem](https://golang.org/src/net/http/fs.go) | -| [FileSystem Adapter](https://github.com/naucon/casbin-fs-adapter) | File | [@naucon](https://github.com/naucon) | ❌ | For [fs.FS](https://pkg.go.dev/io/fs) and [embed.FS](https://pkg.go.dev/embed) | +import {AdapterDotNETData} from "@site/src/tableData/AdapterData/AdapterDotNETData"; import { + AdapterGoData +} from "@site/src/tableData/AdapterData/AdapterGoData"; +import {AdapterJavaData} from "@site/src/tableData/AdapterData/AdapterJavaData"; +import {AdapterLuaData} from "@site/src/tableData/AdapterData/AdapterLuaData"; +import AdapterMDTable from "@site/src/tableData/AdapterData/AdapterMDTable"; +import {AdapterNodejsData} from "@site/src/tableData/AdapterData/AdapterNodejsData"; +import {AdapterPhpData} from "@site/src/tableData/AdapterData/AdapterPhpData"; +import {AdapterPythonData} from "@site/src/tableData/AdapterData/AdapterPythonData"; +import {AdapterRubyData} from "@site/src/tableData/AdapterData/AdapterRubyData"; +import {AdapterRustData} from "@site/src/tableData/AdapterData/AdapterRustData"; +import {AdapterSwiftData} from "@site/src/tableData/AdapterData/AdapterSwiftData"; + + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|-----------------------------------------------------------------------|----------|--------------------------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [JDBC Adapter](https://github.com/jcasbin/jdbc-adapter) | JDBC | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server are supported by [JDBC](https://docs.oracle.com/cd/E19226-01/820-7688/gawms/index.html) | -| [Hibernate Adapter](https://github.com/jcasbin/hibernate-adapter) | ORM | Casbin | ✅ | Oracle, DB2, SQL Server, Sybase, MySQL, PostgreSQL are supported by [Hibernate](http://www.hibernate.org/) | -| [MyBatis Adapter](https://github.com/jcasbin/mybatis-adapter) | ORM | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server (the same as JDBC) are supported by [MyBatis 3](https://mybatis.org/mybatis-3/) | -| [Hutool Adapter](https://github.com/mapleafgo/jcasbin-extra) | ORM | [@mapleafgo](https://github.com/mapleafgo) | ✅ | MySQL, Oracle, PostgreSQL, SQLite are supported by [Hutool](https://github.com/looly/hutool) | -| [MongoDB Adapter](https://github.com/zzl221000/jcasbin-mongo-adapter) | NoSQL | Casbin | ✅ | MongoDB is supported by [mongodb-driver-sync](https://mongodb.github.io/mongo-java-driver/) | -| [DynamoDB Adapter](https://github.com/jcasbin/dynamodb-adapter) | NoSQL | Casbin | ❌ | For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | -| [Redis Adapter](https://github.com/jcasbin/redis-adapter) | KV store | Casbin | ✅ | For [Redis](https://redis.io/) | + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|-------------------------------------------------------------------------------------------------------------|------------|----------------------------------------------------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [Filtered File Adapter (built-in)](/docs/policy-subset-loading) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files with policy subset loading support | -| [String Adapter (built-in)](https://github.com/casbin/node-casbin/blob/master/src/persist/stringAdapter.ts) | String | [@calebfaruki](https://github.com/calebfaruki) | ❌ | For String | -| [Basic Adapter](https://github.com/node-casbin/basic-adapter) | Native ORM | Casbin | ✅ | pg, mysql, mysql2, sqlite3, oracledb, mssql are supported by the adapter itself | -| [Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) | -| [TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) | -| [Prisma Adapter](https://github.com/node-casbin/prisma-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, AWS Aurora, Azure SQL are supported by [Prisma](https://www.prisma.io/) | -| [Knex Adapter](https://github.com/knex/casbin-knex-adapter) | ORM | [knex](https://github.com/knex) | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle are supported by [Knex.js](https://knexjs.org/) | -| [Objection.js Adapter](https://github.com/willsoto/casbin-objection-adapter) | ORM | [@willsoto](https://github.com/willsoto) | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle are supported by [Objection.js](https://vincit.github.io/objection.js/) | -| [MikroORM Adapter](https://github.com/baisheng/casbin-mikroorm-adapter) | ORM | [@baisheng](https://github.com/baisheng) | ✅ | MongoDB, MySQL, MariaDB, PostgreSQL, SQLite are supported by [MikroORM](https://mikro-orm.io/) | -| [Node PostgreSQL Native Adapter](https://github.com/touchifyapp/casbin-pg-adapter) | SQL | [@touchifyapp](https://github.com/touchifyapp) | ✅ | PostgreSQL adapter with advanced policy subset loading support and improved performances built with [node-postgres](https://node-postgres.com/). | -| [Mongoose Adapter](https://github.com/node-casbin/mongoose-adapter) | NoSQL | [elastic.io](https://github.com/elasticio) and Casbin | ✅ | MongoDB is supported by [Mongoose](https://mongoosejs.com/) | -| [Mongoose Adapter (No-Transaction)](https://github.com/minhducck/casbin-mongoose-adapter) | NoSQL | [minhducck](https://github.com/minhducck) | ✅ | MongoDB is supported by [Mongoose](https://mongoosejs.com/) | -| [Node MongoDB Native Adapter](https://github.com/juicycleff/casbin-mongodb-adapter) | NoSQL | [@juicycleff](https://github.com/juicycleff) | ✅ | For [Node MongoDB Native](https://mongodb.github.io/node-mongodb-native/) | -| [DynamoDB Adapter](https://github.com/fospitia/casbin-dynamodb-adapter) | NoSQL | [@fospitia](https://github.com/fospitia) | ✅ | For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | -| [Couchbase Adapter](https://github.com/MarkMYoung/casbin-couchbase-adapter) | NoSQL | [@MarkMYoung](https://github.com/MarkMYoung) | ✅ | For [Couchbase](https://www.couchbase.com/) | -| [Redis Adapter](https://github.com/node-casbin/redis-adapter) | KV store | Casbin | ❌ | For [Redis](https://redis.io/) | -| [Redis Adapter](https://github.com/NandaKishorJeripothula/node-casbin-redis-adapter) | KV store | [@NandaKishorJeripothula](https://github.com/NandaKishorJeripothula) | ❌ | For [Redis](https://redis.io/) | + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|---------------------------------------------------------------------------------|----------|--------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [Database Adapter](https://github.com/php-casbin/database-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [techone/database](https://github.com/techoner/database) | -| [Zend Db Adapter](https://github.com/php-casbin/zend-db-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Oracle, IBM DB2, Microsoft SQL Server, Other PDO Driver are supported by [zend-db](https://docs.zendframework.com/zend-db/) | -| [Doctrine DBAL Adapter (Recommend)](https://github.com/php-casbin/dbal-adapter) | ORM | Casbin | ✅ | Powerful PHP database abstraction layer ([DBAL](https://github.com/doctrine/dbal)) with many features for database schema introspection and management. | -| [Medoo Adapter](https://github.com/php-casbin/medoo-adapter) | ORM | Casbin | ✅ | [Medoo](https://github.com/catfan/Medoo) is a lightweight PHP Database Framework to Accelerate Development, supports all SQL databases, including `MySQL`, `MSSQL`, `SQLite`, `MariaDB`, `PostgreSQL`, `Sybase`, `Oracle` and more. | -| [Laminas-db Adapter](https://github.com/php-casbin/laminas-db-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft SQL Server, PDO, etc. are supported by [laminas-db](https://github.com/laminas/laminas-db) | -| [Zend-db Adapter](https://github.com/php-casbin/zend-db-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft SQL Server, PDO, etc. are supported by [zend-db](https://github.com/zendframework/zend-db) | -| [ThinkORM Adapter (ThinkPHP)](https://github.com/getandpost/tp3-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Oracle, Microsoft SQL Server, MongoDB are supported by [ThinkORM](https://github.com/top-think/think-orm) | -| [Redis Adapter](https://github.com/nsnake/CasbinAdapter-Redis-Adapter) | KV store | [@nsnake](https://github.com/nsnake) | ❌ | For [Redis](https://redis.io/) | + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|-----------------------------------------------------------------------------------------|----------|--------------------------------------------------------------|----------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [Django ORM Adapter](https://github.com/pycasbin/django-orm-adapter) | ORM | Casbin | ✅ | PostgreSQL, MariaDB, MySQL, Oracle, SQLite, IBM DB2, Microsoft SQL Server, Firebird, ODBC are supported by [Django ORM](https://docs.djangoproject.com/en/3.0/ref/databases/) | -| [SQLObject Adapter](https://github.com/pycasbin/sqlobject-adapter) | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Microsoft SQL Server, Firebird, Sybase, MAX DB, pyfirebirdsql are supported by [SQLObject](http://www.sqlobject.org/index.html) | -| [SQLAlchemy Adapter](https://github.com/pycasbin/sqlalchemy-adapter) | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by [SQLAlchemy](https://www.sqlalchemy.org/) | -| [Async SQLAlchemy Adapter](https://github.com/pycasbin/async-sqlalchemy-adapter) | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by [SQLAlchemy](https://www.sqlalchemy.org/) | -| [Async Databases Adapter](https://github.com/pycasbin/casbin-databases-adapter) | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by [Databases](https://www.encode.io/databases/) | -| [Peewee Adapter](https://github.com/shblhy/peewee-adapter) | ORM | [@shblhy](https://github.com/shblhy) | ✅ | PostgreSQL, MySQL, SQLite are supported by [Peewee](http://docs.peewee-orm.com/) | -| [MongoEngine Adapter](https://github.com/zhangbailong945/mongoengine_adapter) | ORM | [@zhangbailong945](https://github.com/zhangbailong945) | ❌ | MongoDB is supported by [MongoEngine](http://mongoengine.org/) | -| [Pony ORM Adapter](https://github.com/drorvinkler/pycasbin-pony-adapter) | ORM | [@drorvinkler](https://github.com/drorvinkler) | ✅ | MySQL, PostgreSQL, SQLite, Oracle, CockroachDB are supported by [Pony ORM](https://ponyorm.org/) | -| [Tortoise ORM Adapter](https://github.com/thearchitector/casbin-tortoise-adapter) | ORM | [@thearchitector](https://github.com/thearchitector) | ✅ | PostgreSQL (>=9.4), MySQL, MariaDB, and SQLite are supported by [Tortoise ORM](https://tortoise.github.io/databases.html) | -| [Async Ormar Adapter](https://github.com/shepilov-vladislav/ormar-casbin-adapter) | ORM | [@shepilov-vladislav](https://github.com/shepilov-vladislav) | ✅ | PostgreSQL, MySQL, SQLite are supported by [Ormar](https://github.com/collerek/ormar/) | -| [SQLModel Adapter](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter) | ORM | [@shepilov-vladislav](https://github.com/shepilov-vladislav) | ✅ | PostgreSQL, MySQL, SQLite are supported by [SQLModel](https://github.com/tiangolo/sqlmodel) | -| [Couchbase Adapter](https://github.com/ScienceLogic/casbin-couchbase-adapter) | NoSQL | [ScienceLogic](https://github.com/ScienceLogic) | ✅ (without `remove_filtered_policy()`) | For [Couchbase](https://www.couchbase.com/) | -| [DynamoDB Adapter](https://github.com/abqadeer/python-dycasbin) | NoSQL | [@abqadeer](https://github.com/abqadeer/) | ✅ | For [DynamoDB](https://aws.amazon.com/dynamodb/) | -| [Pymongo Adapter](https://github.com/pycasbin/pymongo-adapter) | NoSQL | Casbin | ❌ | MongoDB is supported by [Pymongo](https://pypi.org/project/pymongo/) | -| [Redis Adapter](https://github.com/pycasbin/redis-adapter) | KV store | Casbin | ✅ | For [Redis](https://redis.io/) | -| [GCP Firebase Adapter](https://github.com/devrushi41/pycasbin-firebase-adapter) | Cloud | [@devrushi41](https://github.com/devrushi41) | ✅ | For [Google Cloud Platform Firebase](https://firebase.google.com/) | + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|-----------------------------------------------------------------------------------|-------|--------------------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [EF Adapter](https://github.com/casbin-net/EF-Adapter) | ORM | Casbin | ❌ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. are supported by [Entity Framework 6](https://docs.microsoft.com/en-us/ef/ef6/) | -| [EFCore Adapter](https://github.com/casbin-net/EFCore-Adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. are supported by [Entity Framework Core](https://docs.microsoft.com/en-us/ef/core/) | -| [Linq2DB Adapter](https://github.com/Tirael/Linq2DB-Adapter) | ORM | [@Tirael](https://github.com/Tirael) | ✅ | [MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, Access, Firebird, Sybase, etc.](https://github.com/linq2db/linq2db/blob/master/Tests/Base/TestProvName.cs) are supported by [linq2db](https://github.com/linq2db/linq2db) | -| [Azure Cosmos DB Adapter](https://github.com/sagarkhandelwal/Casbin-Using-Cosmos) | Cloud | [@sagarkhandelwal](https://github.com/sagarkhandelwal) | ✅ | For [Microsoft Azure Cosmos DB](https://docs.microsoft.com/en-us/azure/cosmos-db/introduction) | + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|------------------------------------------------------------------------|---------|----------------------------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [Diesel Adapter](https://github.com/casbin-rs/diesel-adapter) | ORM | Casbin | ✅ | [SQLite, PostgreSQL, MySQL](https://github.com/diesel-rs/diesel/blob/master/guide_drafts/backend_installation.md) are supported by [Diesel](http://diesel.rs/) | -| [Sqlx Adapter](https://github.com/casbin-rs/sqlx-adapter) | ORM | Casbin | ✅ | PostgreSQL, MySQL are supported by [Sqlx](https://github.com/launchbadge/sqlx) with fully asynchronous operation | -| [SeaORM Adapter](https://github.com/lingdu1234/sea_orm_casbin_adapter) | ORM | [@lingdu1234](https://github.com/lingdu1234) | ✅ | PostgreSQL, MySQL, SQLite are supported by [SeaORM](https://github.com/SeaQL/sea-orm) with fully asynchronous operation | -| [SeaORM Adapter](https://github.com/ZihanType/sea-orm-adapter) | ORM | [@ZihanType](https://github.com/ZihanType) | ✅ | PostgreSQL, MySQL, SQLite are supported by [SeaORM](https://github.com/SeaQL/sea-orm) with fully asynchronous operation | -| [Rbatis Adapter](https://github.com/jiashiwen/casbin-rbatis-adapter) | ORM | [rbatis](https://github.com/rbatis) | ✅ | MySQL, PostgreSQL, SQLite, SQL Server, MariaDB, TiDB, CockroachDB, Oracle are supported by [Rbatis](https://github.com/rbatis/rbatis) | -| [DynamodDB Adapter](https://github.com/fospitia/dynamodb-adapter) | NoSQL | [@fospitia](https://github.com/fospitia) | ✅ | For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | -| [MongoDB Adapter](https://github.com/wangjun861205/nb-mongo-adapter) | MongoDB | [@wangjun861205](https://github.com/wangjun861205) | ✅ | For [MongoDB](https://www.mongodb.com) | -| [JSON Adapter](http://github.com/casbin-rs/json-adapter) | String | Casbin | ✅ | For [JSON](https://json.org/) | -| [YAML Adapter](https://github.com/casbin-rs/yaml-adapter) | String | Casbin | ✅ | For [YAML](https://yaml.org/) | + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|-------------------------------------------------------------------------|------|---------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [Sequel Adapter](https://github.com/CasbinRuby/casbin-ruby-sql-adapter) | ORM | [CasbinRuby](https://github.com/CasbinRuby) | ✅ | [ADO, Amalgalite, IBM_DB, JDBC, MySQL, Mysql2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3, and TinyTDS](http://sequel.jeremyevans.net/) are supported by [Sequel](http://sequel.jeremyevans.net/) | + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|---------------------------------------------------------------------------------------------------------------------------|--------|--------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [Memory Adapter (built-in)](https://github.com/casbin/SwiftCasbin/blob/master/Sources/Casbin/Adapter/MemoryAdapter.swift) | Memory | Casbin | ❌ | For memory | -| [Fluent Adapter](https://github.com/SwiftCasbin/fluent-adapter) | ORM | Casbin | ✅ | [PostgreSQL, SQLite, MySQL, MongoDB](https://docs.vapor.codes/4.0/fluent/overview/#drivers) are supported by [Fluent](https://github.com/vapor/fluent) | + +``` ```mdx-code-block -``` -| Adapter | Type | Author | AutoSave | Description | -|------------------------------------------------------------------------------|------|------------------------------------------------|----------|------------------------------------------------------------------------------------------------------------------------------------| -| [File Adapter (built-in)](/docs/adapters#file-adapter-built-in) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files | -| [Filtered File Adapter (built-in)](/docs/policy-subset-loading) | File | Casbin | ❌ | For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files with policy subset loading support | -| [LuaSQL Adapter](https://github.com/casbin-lua/luasql-adapter) | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite3 are supported by [LuaSQL](http://lunarmodules.github.io/luasql/) | -| [4DaysORM Adapter](https://github.com/casbin-lua/4daysorm-adapter) | ORM | Casbin | ✅ | MySQL, SQLite3 are supported by [4DaysORM](https://github.com/itdxer/4DaysORM) | -| [OpenResty Adapter](https://github.com/tom2nonames/lua-resty-casbin-adapter) | ORM | [@tom2nonames](https://github.com/tom2nonames) | ✅ | MySQL, PostgreSQL are supported by it | + +``` ```mdx-code-block @@ -413,29 +296,29 @@ e := casbin.NewEnforcer("examples/basic_model.conf", a) If you want to convert adapter from ``A`` to ``B``, you can do like this: -1. Load policy from A to memory +1.Load policy from A to memory - ```go - e, _ := NewEnforcer(m, A) +```go +e, _ := NewEnforcer(m, A) ``` - or +or - ```go - e.SetAdapter(A) - e.LoadPolicy() +```go +e.SetAdapter(A) +e.LoadPolicy() ``` -2. convert your adapter from A to B +2.convert your adapter from A to B - ```go - e.SetAdapter(B) - ``` +```go +e.SetAdapter(B) +``` -3. Save policy from memory to B +3.Save policy from memory to B - ```go - e.SavePolicy() +```go +e.SavePolicy() ``` ## Load/Save at run-time @@ -548,13 +431,13 @@ There're details about how to write an adapter. * The unique key index should be built on columns `ptype,v0,v1,v2,v3,v4,v5`. * `LoadFilteredPolicy` requires a `filter` as parameter. The filter should be something like this. - ```json - { - "p":[ [ "alice" ], [ "bob" ] ], - "g":[ [ "", "book_group" ], [ "", "pen_group" ] ], - "g2":[ [ "alice" ] ] - } - ``` +```json +{ + "p":[ [ "alice" ], [ "bob" ] ], + "g":[ [ "", "book_group" ], [ "", "pen_group" ] ], + "g2":[ [ "alice" ] ] +} +``` ### Who is responsible to create the DB? diff --git a/docs/Dispatchers.mdx b/docs/Dispatchers.mdx index 8dfa9b6e..f52f76d3 100644 --- a/docs/Dispatchers.mdx +++ b/docs/Dispatchers.mdx @@ -23,12 +23,12 @@ A complete list of Casbin dispatchers is provided below. Any 3rd-party contribut ```mdx-code-block -``` -| Dispatcher | Type | Author | Description | -|-------------------------------------------------------------------------|------|------------------------------------|-------------------------------------------------------------------------| -| [Hashicorp Raft Dispatcher](https://github.com/casbin/hraft-dispatcher) | Raft | Casbin | A dispatcher based on [Hashicorp Raft](https://github.com/hashicorp/raft) | -| [KDKYG/casbin-dispatcher](https://github.com/KDKYG/casbin-dispatcher) | Raft | [@KDKYG](https://github.com/KDKYG) | A dispatcher based on [Hashicorp Raft](https://github.com/hashicorp/raft) | +import DispatcherMDTable from "@site/src/tableData/DispatcherData/DispatcherMDTable"; +import {DispatcherGoData} from "@site/src/tableData/DispatcherData/DispatcherGoData"; + + +``` ```mdx-code-block diff --git a/docs/Middlewares.mdx b/docs/Middlewares.mdx index 887e7519..b80dc84c 100644 --- a/docs/Middlewares.mdx +++ b/docs/Middlewares.mdx @@ -11,144 +11,86 @@ authors: [hsluoyz] ```mdx-code-block -``` -| Name | Description | -|--------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Gin](https://github.com/gin-gonic/gin) | A HTTP web framework featuring a Martini-like API with much better performance, via plugin: [authz](https://github.com/gin-contrib/authz) or [gin-casbin](https://github.com/maxwellhertz/gin-casbin) | -| [Beego](https://github.com/beego/beego) | An open-source, high-performance web framework for Go, via built-in plugin: [plugins/authz](https://github.com/astaxie/beego/blob/master/plugins/authz) | -| [Caddy](https://github.com/caddyserver/caddy) | Fast, cross-platform HTTP/2 web server with automatic HTTPS, via plugin: [caddy-authz](https://github.com/casbin/caddy-authz) | -| [Traefik](https://github.com/traefik/traefik) | The cloud native application proxy, via plugin: [traefik-auth-plugin](https://github.com/Knight-7/auth-plugin) | -| [Kratos](https://github.com/go-kratos/kratos) | Your ultimate Go microservices framework for the cloud-native era, via plugin: [tx7do/kratos-casbin](https://github.com/tx7do/kratos-casbin) or [overstarry/kratos-casbin](https://github.com/overstarry/kratos-casbin) | -| [Go kit](https://github.com/go-kit/kit) | A toolkit for microservices, via built-in plugin: [plugins/authz](https://github.com/go-kit/kit/tree/master/auth/casbin) | -| [Fiber](https://github.com/gofiber/fiber) | An Express inspired web framework written in Go, via middleware: [casbin in gofiber/contrib](https://github.com/gofiber/contrib/tree/main/casbin) or [fiber-casbinrest](https://github.com/prongbang/fiber-casbinrest) or [fiber-boilerplate](https://github.com/sujit-baniya/fiber-boilerplate) or [gofiber-casbin](https://github.com/pcminh0505/gofiber-casbin) | -| [Revel](https://github.com/revel/revel) | A high productivity, full-stack web framework for the Go language, via plugin: [auth/casbin](https://github.com/revel/modules/tree/master/auth/casbin) | -| [Echo](https://github.com/labstack/echo) | High performance, minimalist Go web framework, via plugin: [echo-authz](https://github.com/labstack/echo-contrib/tree/master/casbin) or [echo-casbin](https://github.com/alexferl/echo-casbin) or [casbinrest](https://github.com/prongbang/casbinrest) or [echo-boilerplate](https://github.com/alexferl/echo-boilerplate) | -| [Iris](https://github.com/kataras/iris) | The fastest web framework for Go in (THIS) Earth. HTTP/2 Ready-To-GO, via plugin: [casbin](https://github.com/iris-contrib/middleware/tree/master/casbin) or [iris-middleware-casbin](https://github.com/kokobing/iris-middleware-casbin) | -| [GoFrame](https://github.com/gogf/gf) | A modular, powerful, high-performance and enterprise-class application development framework of Golang, via plugin: [gf-casbin](https://github.com/dobyte/gf-casbin) | -| [Negroni](https://github.com/urfave/negroni) | Idiomatic HTTP Middleware for Golang, via plugin: [negroni-authz](https://github.com/casbin/negroni-authz) | -| [Chi](https://github.com/pressly/chi) | A lightweight, idiomatic and composable router for building HTTP services, via plugin: [chi-authz](https://github.com/casbin/chi-authz) | -| [Buffalo](https://github.com/gobuffalo/buffalo) | A Go web development eco-system, designed to make your life easier, via plugin: [buffalo-mw-rbac](https://github.com/kgosse/buffalo-mw-rbac) | -| [Macaron](https://github.com/go-macaron/macaron) | A high productive and modular web framework in Go, via plugin: [authz](https://github.com/go-macaron/authz) | -| [DotWeb](https://github.com/devfeel/dotweb) | Simple and easy go web micro framework, via plugin: [authz](https://github.com/devfeel/middleware/tree/master/authz) | -| [Tango](https://github.com/lunny/tango) | Micro & pluggable web framework for Go, via plugin: [authz](https://gitea.com/tango/authz) | -| [Baa](https://github.com/go-baa/baa) | An express Go web framework with routing, middleware, dependency injection and http context, via plugin: [authz](https://github.com/baa-middleware/authz) | -| [Tyk](https://github.com/TykTechnologies/tyk) | An open source Enterprise API Gateway, supporting REST, GraphQL, TCP and gRPC protocols, via plugin: [tyk-authz](https://github.com/casbin/tyk-authz) | -| [Hertz](https://github.com/cloudwego/hertz) | Go HTTP framework with high-performance and strong-extensibility for building micro-services, via plugin: [casbin](https://github.com/hertz-contrib/casbin) | +import {MiddlewareDotNETData} from "@site/src/tableData/MiddlewareData/MiddlewareDotNETData"; import { + MiddlewareGoData +} from "@site/src/tableData/MiddlewareData/MiddlewareGoData"; +import {MiddlewareJavaData} from "@site/src/tableData/MiddlewareData/MiddlewareJavaData"; +import {MiddlewareLuaData} from "@site/src/tableData/MiddlewareData/MiddlewareLuaData"; +import {MiddlewareCppData} from "@site/src/tableData/MiddlewareData/MiddlewareCppData"; +import MiddlewareMDTable + from "@site/src/tableData/MiddlewareData/MiddlewareMDTable"; +import {MiddlewareNodejsData} from "@site/src/tableData/MiddlewareData/MiddlewareNodejsData"; +import {MiddlewarePhpData} from "@site/src/tableData/MiddlewareData/MiddlewarePhpData"; +import {MiddlewarePythonData} from "@site/src/tableData/MiddlewareData/MiddlewarePythonData"; +import {MiddlewareRustData} from "@site/src/tableData/MiddlewareData/MiddlewareRustData"; +import {MiddlewareSwiftData} from "@site/src/tableData/MiddlewareData/MiddlewareSwiftData"; + + +``` ```mdx-code-block -``` -| Name | Description | -|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Spring Boot](https://projects.spring.io/spring-boot/) | Makes it easy to create Spring-powered applications and services, via plugin: [casbin-spring-boot-starter](https://github.com/jcasbin/casbin-spring-boot-starter) or [Simple SpringBoot security demo with jCasbin](https://github.com/jveverka/spring-examples/tree/master/spring-jcasbin) | -| [Apache Shiro](https://shiro.apache.org/) | A powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management, via plugin: [shiro-casbin](https://github.com/jcasbin/shiro-casbin) or [shiro-jcasbin-spring-boot-starter](https://github.com/mapleafgo/shiro-jcasbin-spring-boot-starter) | -| [JFinal](http://www.jfinal.com/) | A simple, light, rapid, independent and extensible Java WEB + ORM framework, via plugin: [jfinal-authz](https://github.com/jcasbin/jfinal-authz) | -| [Nutz](https://nutzam.com/) | Web framework (MVC/IOC/AOP/DAO/JSON) for all Java developers, via plugin: [nutz-authz](https://github.com/jcasbin/nutz-authz) | -| [mangoo I/O](https://github.com/svenkubiak/mangooio) | An intuitive, lightweight, high performance full stack Java web framework, via built-in plugin: [AuthorizationService.java](https://github.com/svenkubiak/mangooio/blob/e8c647a3f7c427bce27377025bec074f6d767f50/mangooio-core/src/main/java/io/mangoo/services/AuthorizationService.java) | + +``` ```mdx-code-block -``` -| Name | Description | -|------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Shield](https://github.com/odpf/shield) | An authZ server and authZ aware reverse-proxy built on top of casbin. | -| [Express](https://github.com/expressjs/express) | Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz) | -| [Koa](https://github.com/koajs/koa) | Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) or [koajs-starter](https://github.com/djordjep/koajs-starter) or [koa-casbin](https://github.com/zcong1993/koa-casbin) | -| [LoopBack 4](https://github.com/koajs/koa) | A highly extensible Node.js and TypeScript framework for building APIs and microservices, via plugin: [loopback4-authorization](https://github.com/sourcefuse/loopback4-authorization) | -| [Nest](https://nestjs.com/) | Progressive Node.js framework for building efficient and scalable server-side applications on top of TypeScript & JavaScript. via plugin: [nest-authz](https://github.com/dreamdevil00/nest-authz) or [nest-casbin](https://github.com/pardjs/nest-casbin) or [NestJS Casbin Module](https://github.com/switchit-conseil/nestjs-casbin-module) or [nestjs-casbin](https://github.com/juicycleff/nestjs-casbin) or [acl-nest](https://github.com/Twiddlle/acl-nest) or [nestjs-casbin-typeorm](https://github.com/0xb4lamx/nestjs-casbin-typeorm) | -| [Fastify](https://github.com/fastify/fastify) | Fast and low overhead web framework, for Node.js. via plugin: [fastify-casbin](https://github.com/nearform/fastify-casbin) or [fastify-casbin-rest](https://github.com/nearform/fastify-casbin-rest) | -| [Egg](https://github.com/eggjs/egg) | Born to build better enterprise frameworks and apps with Node.js & Koa, via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) or [egg-zrole](https://github.com/klren0312/egg-zrole) | -| [hapi](https://hapi.dev/) | The Simple, Secure Framework Developers Trust. via plugin: [hapi-authz](https://github.com/node-casbin/hapi-authz) | -| [Casbin JWT Express](https://github.com/tiagostutz/casbin-jwt-express) | Authorization middleware that uses stateless JWT token to validate ACL rules using Casbin | + +``` ```mdx-code-block -``` -| Name | Description | -|----------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Laravel](https://laravel.com/) | The PHP framework for web artisans, via plugin: [laravel-authz](https://github.com/php-casbin/laravel-authz) | -| [Yii PHP Framework](https://www.yiiframework.com/) | A fast, secure, and efficient PHP framework, via plugin: [yii-permission](https://github.com/php-casbin/yii-permission) or [yii-casbin](https://github.com/php-casbin/yii-casbin) | -| [CakePHP](https://cakephp.org/) | Build fast, grow solid PHP Framework, via plugin: [cake-permission](https://github.com/php-casbin/cake-permission) | -| [CodeIgniter](https://codeigniter.com/) | Associate users with roles and permissions in CodeIgniter4 Web Framework, via plugin: [CodeIgniter Permission](https://github.com/php-casbin/codeigniter-permission) | -| [ThinkPHP 5.1](https://www.thinkphp.cn/) | The ThinkPHP 5.1 framework, via plugin: [think-casbin](https://github.com/php-casbin/think-casbin) | -| [ThinkPHP 6.0](https://www.thinkphp.cn/) | The ThinkPHP 6.0 framework, via plugin: [think-authz](https://github.com/php-casbin/think-authz) | -| [Symfony](https://symfony.com/) | The Symfony PHP framework, via plugin: [symfony-permission](https://github.com/php-casbin/symfony-permission) or [symfony-casbin](https://github.com/videni/symfony-casbin) | -| [Hyperf](https://github.com/hyperf/hyperf) | A coroutine framework that focuses on hyperspeed and flexibility, via plugin: [hyperf-permission](https://github.com/php-casbin/hyperf-permission) or [donjan-deng/hyperf-casbin](https://github.com/donjan-deng/hyperf-casbin) or [cblink/hyperf-casbin](https://github.com/cblink/hyperf-casbin) | -| [EasySwoole](https://www.easyswoole.com/) | A distributed, persistent memory PHP framework based on the Swoole extension, via plugin: [easyswoole-permission](https://github.com/php-casbin/easyswoole-permission) or [easyswoole-hyperfOrm-permission](https://github.com/ice-leng/easyswoole-hyperfOrm-permission) | -| [Slim](https://www.slimframework.com/) | A PHP micro framework that helps you quickly write simple yet powerful web applications and APIs, via plugin: [casbin-with-slim](https://github.com/php-casbin/casbin-with-slim) | -| [Phalcon](https://phalcon.io/) | A full-stack PHP framework delivered as a C-extension, via plugin: [phalcon-permission](https://github.com/php-casbin/phalcon-permission) | -| [Webman](https://github.com/walkor/webman) | High performance HTTP Service Framework for PHP based on Workerman, via plugin: [webman-permission](https://github.com/php-casbin/webman-permission) or [webman-casbin](https://github.com/sunsgneayo/webman-casbin) | + +``` ```mdx-code-block -``` -| Name | Description | -|------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Django](https://www.djangoproject.com/) | A high-level Python Web framework, via plugin: [django-casbin](https://github.com/pycasbin/django-casbin) or [django-authorization](https://github.com/pycasbin/django-authorization) | -| [Flask](http://flask.pocoo.org/) | A microframework for Python based on Werkzeug, Jinja 2 and good intentions, via plugin: [flask-authz](https://github.com/pycasbin/flask-authz) or [Flask-Casbin (3rd-party, but maybe more friendly)](https://github.com/daymien/Flask-Casbin) or [rbac-flask](https://github.com/daobeng/rbac-flask/tree/flask-casbin) | -| [FastAPI](https://github.com/tiangolo/fastapi) | A modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints, via plugin: [fastapi-authz](https://github.com/pycasbin/fastapi-authz) or [Fastapi-app](https://github.com/lqmanh/fastapi-app) | -| [OpenStack](https://www.openstack.org/) | The most widely deployed open source cloud software in the world, via plugin: [openstack-patron](https://github.com/casbin/openstack-patron) | + +``` ```mdx-code-block -``` -| Name | Description | -|------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Nginx](https://nginx.org/) | A HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, via plugin: [nginx-casbin-module](https://github.com/casbin-cpp/nginx-casbin-module) | + +``` ```mdx-code-block -``` -| Name | Description | -|--------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core) | An open-source and cross-platform framework for building modern cloud based internet connected applications, such as web apps, IoT apps and mobile backends, via plugin: [Casbin.AspNetCore](https://github.com/casbin-net/Casbin.AspNetCore) | -| [ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core) | A simple demo of using Casbin at ASP.NET Core framework, via plugin: [CasbinACL-aspNetCore](https://github.com/MustafaMustafayev/CasbinACL-aspNetCore) | + +``` ```mdx-code-block -``` -| Name | Description | -|---------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Actix](https://github.com/actix/actix) | A Rust actors framework, via plugin: [actix-casbin](https://github.com/casbin-rs/actix-casbin) | -| [Actix web](https://github.com/actix/actix-web) | A small, pragmatic, and extremely fast rust web framework, via plugin: [actix-casbin-auth](https://github.com/casbin-rs/actix-casbin-auth) | -| [Rocket](https://github.com/SergioBenitez/Rocket) | a web framework for Rust that makes it simple to write fast, secure web applications without sacrificing flexibility, usability, or type safety, via plugin: [rocket-authz](https://github.com/casbin-rs/rocket-authz) or [rocket-casbin-auth](https://github.com/0xethsign/rocket-casbin-auth-app) | -| [Axum web](https://github.com/tokio-rs/axum) | A ergonomic and modular rust web framework, via plugin: [axum-casbin-auth](https://github.com/casbin-rs/axum-casbin-auth) | -| [Poem web](https://github.com/poem-web/poem) | A full-featured and easy to use web framework with the Rust programming language, via plugin: [poem-casbin](https://github.com/casbin-rs/poem-casbin) | + +``` ```mdx-code-block -``` -| Name | Description | -|--------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [OpenResty](https://openresty.org/) | A dynamic web platform based on NGINX and LuaJIT, via plugin: [lua-resty-casbin](https://github.com/casbin-lua/lua-resty-casbin) and [casbin-openresty-example](https://github.com/rushitote/casbin-openresty-example) | -| [Kong](https://github.com/Kong/kong) | A cloud-native, platform-agnostic, scalable API Gateway distinguished for its high performance and extensibility via plugins, via plugin: [kong-authz](https://github.com/casbin-lua/kong-authz) | -| [APISIX](https://github.com/apache/apisix) | A dynamic, real-time, high-performance API gateway, via plugin: [authz-casbin](https://github.com/apache/apisix/blob/master/docs/en/latest/plugins/authz-casbin.md) | + +``` ```mdx-code-block -``` -| Name | Description | -|-----------------------------------------|----------------------------------------------------------------------------------------------------------| -| [Vapor](https://github.com/vapor/vapor) | A server-side Swift web framework, via plugin: [vapor-authz](https://github.com/SwiftCasbin/vapor-authz) | + +``` ```mdx-code-block diff --git a/docs/RoleManagers.mdx b/docs/RoleManagers.mdx index f97b4eff..ab94a549 100644 --- a/docs/RoleManagers.mdx +++ b/docs/RoleManagers.mdx @@ -11,59 +11,52 @@ The role manager is used to manage the RBAC role hierarchy (user-role mapping) i ```mdx-code-block -``` -| Role manager | Author | Description | -|---------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Default Role Manager (built-in)](https://github.com/casbin/casbin/blob/master/rbac/default-role-manager/role_manager.go) | Casbin | Supports role hierarchy stored in the Casbin policy | -| [Session Role Manager](https://github.com/casbin/session-role-manager) | [EDOMO Systems](https://github.com/edomosystems) | Supports role hierarchy stored in the Casbin policy, with time-range-based sessions | -| [Okta Role Manager](https://github.com/casbin/okta-role-manager) | Casbin | Supports role hierarchy stored in [Okta](https://www.okta.com/) | -| [Auth0 Role Manager](https://github.com/casbin/auth0-role-manager) | Casbin | Supports role hierarchy stored in [Auth0](https://auth0.com/)'s [Authorization Extension](https://auth0.com/docs/extensions/authorization-extension/v2) | +import {RoleManagerGoData} from "@site/src/tableData/RoleManagerData/RoleManagerGoData"; +import {RoleManagerJavaData} from "@site/src/tableData/RoleManagerData/RoleManagerJavaData"; import RoleManagerMDTable + from "@site/src/tableData/RoleManagerData/RoleManagerMDTable"; +import {RoleManagerNodejsData} from "@site/src/tableData/RoleManagerData/RoleManagerNodejsData"; +import {RoleManagerPhpData} from "@site/src/tableData/RoleManagerData/RoleManagerPhpData"; +import {RoleManagerPythonData} from "@site/src/tableData/RoleManagerData/RoleManagerPythonData"; + + +``` For developers: all role managers must implement the [RoleManager](https://github.com/casbin/casbin/blob/master/rbac/role_manager.go) interface. The [Session Role Manager](https://github.com/casbin/session-role-manager) can be used as a reference implementation. ```mdx-code-block -``` -| Role manager | Author | Description | -|------------------------------------------------------------------------------------------------------------------------------------------------|--------|-------------------------------------------------| -| [Default Role Manager (built-in)](https://github.com/casbin/jcasbin/blob/master/src/main/java/org/casbin/jcasbin/rbac/DefaultRoleManager.java) | Casbin | Supports role hierarchy stored in the Casbin policy | + +``` For developers: all role managers must implement the [RoleManager](https://github.com/casbin/jcasbin/blob/master/src/main/java/org/casbin/jcasbin/rbac/RoleManager.java) interface. The [Default Role Manager](https://github.com/casbin/jcasbin/blob/master/src/main/java/org/casbin/jcasbin/rbac/DefaultRoleManager.java) can be used as a reference implementation. ```mdx-code-block -``` -| Role manager | Author | Description | -|---------------------------------------------------------------------------------------------------------------------|--------|---------------------------------------------------------------------------------| -| [Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) | Casbin | Supports role hierarchy stored in the Casbin policy | -| [Session Role Manager](https://github.com/node-casbin/session-role-manager) | Casbin | Supports role hierarchy stored in the Casbin policy, with time-range-based sessions | + +``` For developers: all role managers must implement the [RoleManager](https://github.com/casbin/node-casbin/blob/master/src/rbac/roleManager.ts) interface. The [Default Role Manager](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) can be used as a reference implementation. ```mdx-code-block -``` -| Role manager | Author | Description | -|-------------------------------------------------------------------------------------------------------------------------------------|--------|-------------------------------------------------| -| [Default Role Manager (built-in)](https://github.com/php-casbin/php-casbin/blob/master/src/Rbac/DefaultRoleManager/RoleManager.php) | Casbin | Supports role hierarchy stored in the Casbin policy | + +``` For developers: all role managers must implement the [RoleManager](https://github.com/php-casbin/php-casbin/blob/master/src/Rbac/RoleManager.php) interface. The [Default Role Manager](https://github.com/php-casbin/php-casbin/blob/master/src/Rbac/DefaultRoleManager/RoleManager.php) can be used as a reference implementation. ```mdx-code-block -``` -| Role manager | Author | Description | -|------------------------------------------------------------------------------------------------------------------------------------|--------|-------------------------------------------------| -| [Default Role Manager (built-in)](https://github.com/casbin/pycasbin/blob/master/casbin/rbac/default_role_manager/role_manager.py) | Casbin | Supports role hierarchy stored in the Casbin policy | + +``` For developers: all role managers must implement the [RoleManager](https://github.com/casbin/pycasbin/blob/master/casbin/rbac/role_manager.py) interface. The [Default Role Manager](https://github.com/casbin/pycasbin/blob/master/casbin/rbac/default_role_manager/role_manager.py) can be used as a reference implementation. diff --git a/docs/Watchers.mdx b/docs/Watchers.mdx index 23c6412b..3e02d37b 100644 --- a/docs/Watchers.mdx +++ b/docs/Watchers.mdx @@ -15,88 +15,61 @@ Similar to policy storage adapters, we do not include watcher code in the main l ```mdx-code-block -``` -| Watcher | Type | Author | Description | -|--------------------------------------------------------------------------------------------------------------------|------------------|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------| -| [PostgreSQL WatcherEx](https://github.com/IguteChung/casbin-psql-watcher) | Database | [@IguteChung](https://github.com/IguteChung) | WatcherEx for [PostgreSQL](https://www.postgresql.org/) | -| [Redis WatcherEx](https://github.com/casbin/redis-watcher) | KV store | Casbin | WatcherEx for [Redis](http://redis.io/) | -| [Redis Watcher](https://github.com/billcobbler/casbin-redis-watcher) | KV store | [@billcobbler](https://github.com/billcobbler) | Watcher for [Redis](http://redis.io/) | -| [Etcd Watcher](https://github.com/casbin/etcd-watcher) | KV store | Casbin | Watcher for [etcd](https://github.com/coreos/etcd) | -| [TiKV Watcher](https://github.com/casbin/tikv-watcher) | KV store | Casbin | Watcher for [TiKV](https://github.com/tikv/tikv) | -| [Kafka Watcher](https://github.com/wgarunap/casbin-kafka-watcher) | Messaging system | [@wgarunap](https://github.com/wgarunap) | Watcher for [Apache Kafka](https://kafka.apache.org/) | -| [NATS Watcher](https://github.com/Soluto/casbin-nats-watcher) | Messaging system | [Soluto](https://github.com/Soluto) | Watcher for [NATS](https://nats.io/) | -| [ZooKeeper Watcher](https://github.com/grepsr/casbin-zk-watcher) | Messaging system | [Grepsr](https://github.com/grepsr) | Watcher for [Apache ZooKeeper](https://zookeeper.apache.org/) | -| [NATS, RabbitMQ, GCP Pub/Sub, AWS SNS & SQS, Kafka, InMemory](https://github.com/rusenask/casbin-go-cloud-watcher) | Messaging System | [@rusenask](https://github.com/rusenask/) | Watcher based on [Go Cloud Dev Kit](https://gocloud.dev/) that works with leading cloud providers and self-hosted infrastructure | -| [NATS, RabbitMQ, GCP Pub/Sub, AWS SNS & SQS, Kafka, InMemory](https://github.com/bartventer/casbin-go-cloud-watcher) | Messaging System | [@bartventer](https://github.com/bartventer/) | WatcherEx based on [Go Cloud Dev Kit](https://gocloud.dev/) that works with leading cloud providers and self-hosted infrastructure | -| [RocketMQ Watcher](https://github.com/fmyxyz/casbin-rocketmq-watcher) | Messaging system | [@fmyxyz](https://github.com/fmyxyz) | Watcher for [Apache RocketMQ](https://rocketmq.apache.org/) | +import {WatcherDotNETData} from "@site/src/tableData/WatcherData/WatcherDotNETData"; import { + WatcherGoData +} from "@site/src/tableData/WatcherData/WatcherGoData"; +import {WatcherJavaData} from "@site/src/tableData/WatcherData/WatcherJavaData"; +import WatcherMDTable from "@site/src/tableData/WatcherData/WatcherMDTable"; +import {WatcherNodejsData} from "@site/src/tableData/WatcherData/WatcherNodejsData"; +import {WatcherPhpData} from "@site/src/tableData/WatcherData/WatcherPhpData"; +import {WatcherPythonData} from "@site/src/tableData/WatcherData/WatcherPythonData"; +import {WatcherRubyData} from "@site/src/tableData/WatcherData/WatcherRubyData"; + + +``` ```mdx-code-block -``` -| Watcher | Type | Author | Description | -|---------------------------------------------------------------------------------|------------------|--------------------------------------------|--------------------------------------------------------------------------------| -| [Etcd Adapter](https://github.com/mapleafgo/jcasbin-extra) | KV store | [@mapleafgo](https://github.com/mapleafgo) | Watcher for [etcd](https://github.com/coreos/etcd) | -| [Redis Watcher](https://github.com/jcasbin/redis-watcher) | KV store | Casbin | Watcher for [Redis](http://redis.io/) | -| [Lettuce-Based Redis Watcher](https://github.com/jcasbin/lettuce-redis-watcher) | KV store | Casbin | Watcher for [Redis](http://redis.io/) based on [Lettuce](https://lettuce.io/)) | -| [Kafka Watcher](https://github.com/jcasbin/kafka-watcher) | Messaging system | Casbin | Watcher for [Apache Kafka](https://kafka.apache.org/) | + + ``` ```mdx-code-block -``` -| Watcher | Type | Author | Description | -|---------------------------------------------------------------------------------------------|------------------|------------------------------------------|------------------------------------------------------------------------------------------| -| [Etcd Watcher](https://github.com/node-casbin/etcd-watcher) | KV store | Casbin | Watcher for [etcd](https://github.com/coreos/etcd) | -| [Redis Watcher](https://github.com/node-casbin/redis-watcher) | KV store | Casbin | Watcher for [Redis](http://redis.io/) | -| [Pub/Sub Watcher](https://github.com/node-casbin/pubsub-watcher) | Messaging system | Casbin | Watcher for [Google Cloud Pub/Sub](https://cloud.google.com/pubsub/docs) | -| [MongoDB Change Streams Watcher](https://github.com/node-casbin/mongo-changestream-watcher) | Database | Casbin | Watcher for [MongoDB Change Streams](https://www.mongodb.com/docs/manual/changeStreams/) | -| [Postgres Watcher](https://github.com/mcollina/casbin-pg-watcher) | Database | [@mcollina](https://github.com/mcollina) | Watcher for [PostgreSQL](https://www.postgresql.org/) | + +``` ```mdx-code-block -``` -| Watcher | Type | Author | Description | -|---------------------------------------------------------------------------------|------------------|-------------------------------------------------|-------------------------------------------------------| -| [Etcd Watcher](https://github.com/pycasbin/etcd-watcher) | KV store | Casbin | Watcher for [etcd](https://github.com/coreos/etcd) | -| [Redis Watcher](https://github.com/pycasbin/redis-watcher) | KV store | Casbin | Watcher for [Redis](http://redis.io/) | -| [Redis Watcher](https://github.com/ScienceLogic/flask-casbin-redis-watcher) | KV store | [ScienceLogic](https://github.com/ScienceLogic) | Watcher for [Redis](http://redis.io/) | -| [Redis Async Watcher](https://github.com/kevinkelin/casbin_async_redis_watcher) | KV store | [@kevinkelin](https://github.com/kevinkelin) | Watcher for [Redis](http://redis.io/) | -| [PostgreSQL Watcher](https://github.com/pycasbin/postgresql-watcher) | Database | Casbin | Watcher for [PostgreSQL](https://www.postgresql.org/) | -| [RabbitMQ Watcher](https://github.com/pycasbin/rabbitmq-watcher) | Messaging system | Casbin | Watcher for [RabbitMQ](https://www.rabbitmq.com/) | + +``` ```mdx-code-block -``` -| Watcher | Type | Author | Description | -|-------------------------------------------------------------------|----------|----------------------------------|---------------------------------------| -| [Redis Watcher](https://github.com/Sbou/Casbin.NET-Redis-Watcher) | KV store | [@Sbou](https://github.com/Sbou) | Watcher for [Redis](http://redis.io/) | + +``` ```mdx-code-block -``` -| Watcher | Type | Author | Description | -|--------------------------------------------------------------------------------|------------------|---------------------------------------------|---------------------------------------------------| -| [Redis Watcher](https://github.com/CasbinRuby/casbin-ruby-redis-watcher) | KV store | [CasbinRuby](https://github.com/CasbinRuby) | Watcher for [Redis](http://redis.io/) | -| [RabbitMQ Watcher](https://github.com/CasbinRuby/casbin-ruby-rabbitmq-watcher) | Messaging system | [CasbinRuby](https://github.com/CasbinRuby) | Watcher for [RabbitMQ](https://www.rabbitmq.com/) | + +``` ```mdx-code-block -``` -| Watcher | Type | Author | Description | -|------------------------------------------------------------------|----------|----------------------------------------|---------------------------------------| -| [Redis Watcher](https://github.com/php-casbin/webman-permission) | KV store | [@Tinywan](https://github.com/Tinywan) | Watcher for [Redis](http://redis.io/) | + +``` ```mdx-code-block diff --git a/docusaurus.config.js b/docusaurus.config.js index 0c0a2a04..7ab7a7db 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,10 +1,11 @@ const lightCodeTheme = require("prism-react-renderer/themes/github"); const darkCodeTheme = require("prism-react-renderer/themes/dracula"); -/** @type {import('@docusaurus/types').DocusaurusConfig} */ +/** @type {import("@docusaurus/types").DocusaurusConfig} */ module.exports = { title: "Casbin", - tagline: "An authorization library that supports access control models like ACL, RBAC, ABAC for Golang, Java, C/C++, Node.js, Javascript, PHP, Laravel, Python, .NET (C#), Delphi, Rust, Ruby, Swift (Objective-C), Lua (OpenResty), Dart (Flutter) and Elixir", + tagline: + "An authorization library that supports access control models like ACL, RBAC, ABAC for Golang, Java, C/C++, Node.js, Javascript, PHP, Laravel, Python, .NET (C#), Delphi, Rust, Ruby, Swift (Objective-C), Lua (OpenResty), Dart (Flutter) and Elixir", url: "https://casbin.org", baseUrl: "/", onBrokenLinks: "throw", @@ -13,7 +14,13 @@ module.exports = { organizationName: "casbin", // Usually your GitHub org/user name. projectName: "casbin.io", // Usually your repo name. themeConfig: { - metadata: [{name: "Casbin", content: "An authorization library that supports access control models like ACL, RBAC, ABAC for Golang, Java, C/C++, Node.js, Javascript, PHP, Laravel, Python, .NET (C#), Delphi, Rust, Ruby, Swift (Objective-C), Lua (OpenResty), Dart (Flutter) and Elixir"}], + metadata: [ + { + name: "Casbin", + content: + "An authorization library that supports access control models like ACL, RBAC, ABAC for Golang, Java, C/C++, Node.js, Javascript, PHP, Laravel, Python, .NET (C#), Delphi, Rust, Ruby, Swift (Objective-C), Lua (OpenResty), Dart (Flutter) and Elixir", + }, + ], algolia: { appId: "6NBEV8TOFK", apiKey: "f00fe67a071e60e18a5c85ae314bba55", @@ -68,6 +75,11 @@ module.exports = { }, ], }, + { + to: "/ecosystem", + label: "Ecosystem", + position: "left", + }, { to: "/blog", label: "Blog", @@ -262,7 +274,15 @@ var _hmt = _hmt || []; prism: { theme: lightCodeTheme, darkTheme: darkCodeTheme, - additionalLanguages: ["ini", "csv", "lua", "csharp", "java", "php", "rust"], + additionalLanguages: [ + "ini", + "csv", + "lua", + "csharp", + "java", + "php", + "rust", + ], }, announcementBar: { id: "announcement", // ID of the announcement bar @@ -328,7 +348,8 @@ var _hmt = _hmt || []; }, ], ], - plugins: [], + plugins: [ + ], i18n: { defaultLocale: "en", locales: ["en", "zh", "ko", "ru", "fr", "de", "ja"], diff --git a/package.json b/package.json index ec67d4b6..5e37d1e3 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,13 @@ "@docusaurus/preset-classic": "^2.4.3", "@giscus/react": "^2.2.4", "@mdx-js/react": "^1.6.21", + "@popperjs/core": "^2.11.8", "clsx": "^1.1.1", + "markdown-to-jsx": "^7.4.0", "prism-react-renderer": "^1.2.1", "react": "^17.0.1", - "react-dom": "^17.0.1" + "react-dom": "^17.0.1", + "react-popper": "^2.3.0" }, "devDependencies": { "@babel/core": "^7.18.13", @@ -41,6 +44,7 @@ "husky": "^8.0.0", "lint-staged": "^13.0.3", "markdownlint-cli": "^0.35.0", + "prettier": "^3.2.4", "stylelint": "^14.11.0", "stylelint-config-standard": "^28.0.0", "stylelint-config-standard-scss": "^5.0.0" diff --git a/src/components/HomepageFeatures/index.js b/src/components/HomepageFeatures/index.js index 5fa77524..4196e98f 100644 --- a/src/components/HomepageFeatures/index.js +++ b/src/components/HomepageFeatures/index.js @@ -10,7 +10,10 @@ const FeatureList = [ path: "/img/model", description: ( - In Casbin, an access control model is abstracted into a CONF file based on the PERM metamodel (Policy, Effect, Request, Matchers). So switching or upgrading the authorization mechanism for a project is just as simple as modifying a configuration. + In Casbin, an access control model is abstracted into a CONF file based + on the PERM metamodel (Policy, Effect, Request, Matchers). So switching + or upgrading the authorization mechanism for a project is just as simple + as modifying a configuration. ), }, @@ -18,14 +21,18 @@ const FeatureList = [ title: Flexible policy storage, path: "/img/storage", description: ( - - adapters - - ), - }}> - {"Besides memory and file, Casbin policy can be stored into lots of places. Currently, dozens of databases are supported, from MySQL, Postgres, Oracle to MongoDB, Redis, Cassandra, AWS S3. Check the full supported list at: {adaptersLink}."} + + adapters + + ), + }} + > + { + "Besides memory and file, Casbin policy can be stored into lots of places. Currently, dozens of databases are supported, from MySQL, Postgres, Oracle to MongoDB, Redis, Cassandra, AWS S3. Check the full supported list at: {adaptersLink}." + } ), }, @@ -34,7 +41,9 @@ const FeatureList = [ path: "/img/language", description: ( - Casbin is implemented in Golang, Java, PHP and Node.js. All implementations share the same API and behaviors. You can learn Casbin once and use it everywhere. + Casbin is implemented in Golang, Java, PHP and Node.js. All + implementations share the same API and behaviors. You can learn Casbin + once and use it everywhere. ), }, @@ -45,7 +54,11 @@ function Feature({title, path, description}) { return (
- {title} + {title}

{title}

diff --git a/src/components/MarkdownToJsx/CustomMarkdown.jsx b/src/components/MarkdownToJsx/CustomMarkdown.jsx new file mode 100644 index 00000000..a37a0e35 --- /dev/null +++ b/src/components/MarkdownToJsx/CustomMarkdown.jsx @@ -0,0 +1,36 @@ +import React from "react"; +import Markdown from "markdown-to-jsx"; + +export const isExternalLink = (url) => { + return url.startsWith("http://") || url.startsWith("https://"); +}; + +const CustomLink = ({children, href, ...props}) => { + const isExternal = isExternalLink(href); + if (isExternal) { + return ( + + {children} + + ); + } + return {children}; +}; + +const CustomMarkdown = ({children}) => { + return ( + + {children} + + ); +}; + +export default CustomMarkdown; diff --git a/src/components/Svg/index.jsx b/src/components/Svg/index.jsx new file mode 100644 index 00000000..b83fb310 --- /dev/null +++ b/src/components/Svg/index.jsx @@ -0,0 +1,33 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from "react"; +import clsx from "clsx"; +import styles from "./styles.module.css"; + +export default function Svg(props) { + const { + svgClass, + colorAttr, + children, + color = "inherit", + size = "medium", + viewBox = "0 0 24 24", + ...rest + } = props; + + return ( + + {children} + + ); +} diff --git a/src/components/Svg/styles.module.css b/src/components/Svg/styles.module.css new file mode 100644 index 00000000..86538c82 --- /dev/null +++ b/src/components/Svg/styles.module.css @@ -0,0 +1,54 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +.svgIcon { + user-select: none; + width: 1em; + height: 1em; + display: inline-block; + fill: currentcolor; + flex-shrink: 0; + color: inherit; +} + +/* font-size */ +.small { + font-size: 1.25rem; +} + +.medium { + font-size: 1.5rem; +} + +.large { + font-size: 2.185rem; +} + +/* colors */ +.primary { + color: var(--ifm-color-primary); +} + +.secondary { + color: var(--ifm-color-secondary); +} + +.success { + color: var(--ifm-color-success); +} + +.error { + color: var(--ifm-color-error); +} + +.warning { + color: var(--ifm-color-warning); +} + +.inherit { + color: inherit; +} diff --git a/src/components/svgIcons/FavoriteIcon/index.jsx b/src/components/svgIcons/FavoriteIcon/index.jsx new file mode 100644 index 00000000..6e80d4e9 --- /dev/null +++ b/src/components/svgIcons/FavoriteIcon/index.jsx @@ -0,0 +1,20 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from "react"; +import Svg from "../../Svg"; + +export default function FavoriteIcon( + props +) { + return ( + + + + ); +} diff --git a/src/css/custom.css b/src/css/custom.css index 1b72bbbd..0b4e642b 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -71,6 +71,13 @@ /* Docs sidebar Collapse&Expand button */ --docs-color: #dadde1; + + /* ecosystem */ + --site-color-favorite-background: #f6fdfd; + --site-color-svg-icon-favorite: #e9669e; + --site-color-checkbox-checked-bg: hsl(167deg 56% 73% / 25%); + --site-color-tooltip: #fff; + --site-color-tooltip-background: #353738; } html[data-theme="dark"] { diff --git a/src/pages/ecosystem/_components/SearchBar.jsx b/src/pages/ecosystem/_components/SearchBar.jsx new file mode 100644 index 00000000..ed932c6a --- /dev/null +++ b/src/pages/ecosystem/_components/SearchBar.jsx @@ -0,0 +1,59 @@ +import {useHistory, useLocation} from "@docusaurus/router"; +import React, {useEffect, useState} from "react"; +import styles from "@site/src/pages/ecosystem/styles.module.css"; +import {translate} from "@docusaurus/Translate"; +import ExecutionEnvironment from "@docusaurus/ExecutionEnvironment"; + +export function prepareListState() { + if (ExecutionEnvironment.canUseDOM) { + return { + scrollTopPosition: window.scrollY, + focusedElementId: document.activeElement?.id, + }; + } + + return undefined; +} + +const SearchNameQueryKey = "name"; + +function readSearchName(search) { + return new URLSearchParams(search).get(SearchNameQueryKey); +} + +export default function SearchBar() { + const history = useHistory(); + const location = useLocation(); + const [value, setValue] = useState(null); + useEffect(() => { + setValue(readSearchName(location.search)); + }, [location]); + return ( +
+ { + setValue(e.currentTarget.value); + const newSearch = new URLSearchParams(location.search); + newSearch.delete(SearchNameQueryKey); + if (e.currentTarget.value) { + newSearch.set(SearchNameQueryKey, e.currentTarget.value); + } + history.push({ + ...location, + search: newSearch.toString(), + state: prepareListState(), + }); + setTimeout(() => { + document.getElementById("searchbar")?.focus(); + }, 0); + }} + /> +
+ ); +} diff --git a/src/pages/ecosystem/_components/ShowcaseCard/index.jsx b/src/pages/ecosystem/_components/ShowcaseCard/index.jsx new file mode 100644 index 00000000..c0040df3 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseCard/index.jsx @@ -0,0 +1,140 @@ +import React from "react"; +import clsx from "clsx"; + +import Heading from "@theme/Heading"; +import styles from "./styles.module.css"; +import {sortBy} from "@site/src/tableData/tableData"; +import Tooltip from "@site/src/pages/ecosystem/_components/ShowcaseTooltip"; +import FavoriteIcon from "@site/src/components/svgIcons/FavoriteIcon"; +import {TagList, Tags} from "@site/src/tableData/tags"; +import CustomMarkdown, {isExternalLink} from "@site/src/components/MarkdownToJsx/CustomMarkdown"; +import {useHistory} from "@docusaurus/router"; + +const TagComp = React.forwardRef(({label, color, description, tag}, ref) => { + + // note to refactor it + const history = useHistory(); + + const handleQueryParamChange = () => { + const queryParams = new URLSearchParams(); + queryParams.set("tags", tag); + history.push({ + search: queryParams.toString(), + }); + }; + + return
  • { + handleQueryParamChange(); + }} ref={ref} className={styles.tag} title={description}> + {label.slice(0, 1).toUpperCase() + label.slice(1)} + +
  • ; +} +); + +function ShowcaseCardTag({tags}) { + const tagObjects = tags.map((tag) => ({tag, ...Tags[tag]})); + // Keep same order for all tags + const tagObjectsSorted = sortBy(tagObjects, (tagObject) => + TagList.indexOf(tagObject.tag) + ); + + return ( + <> + {tagObjectsSorted.map((tagObject, index) => { + const id = `showcase_card_tag_${tagObject.tag}`; + + return ( + + + + ); + })} + + ); +} + +function getCardImage(item) { + return item.image || "/img/favicon.png"; +} + +function getTitleURL(title) { + const regex = /\]\((.+?)\)/; + const match = title.match(regex); + let url = ""; + if(match) { + url = match[1]; + } + return url; +} + +function ShowcaseCard({item}) { + const image = getCardImage(item); + const titleURL = getTitleURL(item.title); + + return ( +
  • + + {item.title} + +
    +
    + + {item.title && {item.title}} + + {item.tags.includes("favorite") && ( + + )} + + {item.author && ( +
    + {item.author} +
    + )} +
    + {item.description && ( +

    + {item.description} +

    + )} +
    +
      + +
    +
  • + ); +} + +export default React.memo(ShowcaseCard); diff --git a/src/pages/ecosystem/_components/ShowcaseCard/styles.module.css b/src/pages/ecosystem/_components/ShowcaseCard/styles.module.css new file mode 100644 index 00000000..c87ddb89 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseCard/styles.module.css @@ -0,0 +1,103 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* +.showcaseCardContainer { + overflow: hidden; + height: 200px; + width: 200px; + border-bottom: 2px solid var(--ifm-color-emphasis-200); +} + */ + +.showcaseCardHeader { + display: flex; + align-items: center; + margin-bottom: 12px; +} + +.showcaseCardTitle { + margin-bottom: 0; + flex: 1 1 auto; +} + +.showcaseCardTitle a { + text-decoration: none; + background: + linear-gradient( + var(--ifm-color-primary), + var(--ifm-color-primary) + ) + 0% 100% / 0% 1px no-repeat; + transition: background-size ease-out 200ms; +} + +.showcaseCardTitle a:not(:focus):hover { + background-size: 100% 1px; +} + +.showcaseCardTitle, +.showcaseCardHeader .svgIconFavorite { + margin-right: 0.25rem; +} + +.showcaseCardHeader .svgIconFavorite { + color: var(--site-color-svg-icon-favorite); +} + +.showcaseCardSrcBtn { + margin-left: 6px; + padding-left: 12px; + padding-right: 12px; + border: none; +} + +.showcaseCardSrcBtn:focus-visible { + background-color: var(--ifm-color-secondary-dark); +} + +[data-theme="dark"] .showcaseCardSrcBtn { + background-color: var(--ifm-color-emphasis-200) !important; + color: inherit; +} + +[data-theme="dark"] .showcaseCardSrcBtn:hover { + background-color: var(--ifm-color-emphasis-300) !important; +} + +.showcaseCardBody { + font-size: smaller; + line-height: 1.66; +} + +.cardFooter { + display: flex; + flex-wrap: wrap; +} + +.tag { + font-size: 0.675rem; + border: 1px solid var(--ifm-color-secondary-darkest); + cursor: default; + margin-right: 6px; + margin-bottom: 6px !important; + border-radius: 12px; + display: inline-flex; + align-items: center; +} + +.tag .textLabel { + margin-left: 8px; +} + +.tag .colorLabel { + width: 7px; + height: 7px; + border-radius: 50%; + margin-left: 6px; + margin-right: 6px; +} diff --git a/src/pages/ecosystem/_components/ShowcaseCards.jsx b/src/pages/ecosystem/_components/ShowcaseCards.jsx new file mode 100644 index 00000000..0c9b17a9 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseCards.jsx @@ -0,0 +1,86 @@ +import {useFilteredList} from "@site/src/pages/ecosystem/_hooks/useFilteredList"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; +import {sortedList} from "@site/src/tableData/tableData"; +import styles from "@site/src/pages/ecosystem/styles.module.css"; +import clsx from "clsx"; +import FavoriteIcon from "@site/src/components/svgIcons/FavoriteIcon"; +import ShowcaseCard from "@site/src/pages/ecosystem/_components/ShowcaseCard"; +import React from "react"; + +const favoriteList = sortedList.filter((item) => + item.tags.includes("favorite") +); +const otherUsers = sortedList.filter((item) => !item.tags.includes("favorite")); + +export default function ShowcaseCards() { + const filteredList = useFilteredList(); + + if (filteredList.length === 0) { + return ( +
    +
    + + No result + +
    +
    + ); + } + + return ( +
    + {filteredList.length === sortedList.length ? ( + <> +
    +
    +
    + + + Our favorites + + + +
    +
      + {favoriteList.map((item, index) => { + return ; + })} +
    +
    +
    +
    + + + All plugins + + +
      + {otherUsers.map((item, index) => ( + + ))} +
    +
    + + ) : ( +
    +
    +
      + {filteredList.map((item, index) => ( + + ))} +
    +
    + )} +
    + ); +} diff --git a/src/pages/ecosystem/_components/ShowcaseFilterToggle/index.jsx b/src/pages/ecosystem/_components/ShowcaseFilterToggle/index.jsx new file mode 100644 index 00000000..ad3b76a1 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseFilterToggle/index.jsx @@ -0,0 +1,73 @@ +import React, {useCallback, useEffect, useState} from "react"; +import clsx from "clsx"; +import {useHistory, useLocation} from "@docusaurus/router"; + +import styles from "./styles.module.css"; +import {prepareListState} from "@site/src/pages/ecosystem/_components/SearchBar"; + +export const OperatorQueryKey = "operator"; + +export function readOperator(search) { + return new URLSearchParams(search).get(OperatorQueryKey) ?? "OR"; +} + +export default function ShowcaseFilterToggle() { + const id = "showcase_filter_toggle"; + const location = useLocation(); + const history = useHistory(); + const [operator, setOperator] = useState(false); + useEffect(() => { + setOperator(readOperator(location.search) === "AND"); + }, [location]); + const toggleOperator = useCallback(() => { + setOperator((o) => !o); + const searchParams = new URLSearchParams(location.search); + searchParams.delete(OperatorQueryKey); + if (!operator) { + searchParams.append(OperatorQueryKey, "AND"); + } + history.push({ + ...location, + search: searchParams.toString(), + state: prepareListState(), + }); + }, [operator, location, history]); + + const ClearTag = () => { + history.push({ + ...location, + search: "", + state: prepareListState(), + }); + }; + + return ( +
    + { + if (e.key === "Enter") { + toggleOperator(); + } + }} + checked={operator} + /> + + + +
    + ); +} diff --git a/src/pages/ecosystem/_components/ShowcaseFilterToggle/styles.module.css b/src/pages/ecosystem/_components/ShowcaseFilterToggle/styles.module.css new file mode 100644 index 00000000..b2948efe --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseFilterToggle/styles.module.css @@ -0,0 +1,61 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +.checkboxLabel { + --height: 25px; + --width: 80px; + --border: 2px; + + display: flex; + width: var(--width); + height: var(--height); + position: relative; + border-radius: var(--height); + border: var(--border) solid var(--ifm-color-primary-darkest); + cursor: pointer; + justify-content: space-around; + opacity: 0.75; + transition: + opacity var(--ifm-transition-fast) + var(--ifm-transition-timing-default); + box-shadow: var(--ifm-global-shadow-md); +} + +.checkboxLabel:hover { + opacity: 1; + box-shadow: + var(--ifm-global-shadow-md), + 0 0 2px 1px var(--ifm-color-primary-dark); +} + +.checkboxLabel::after { + position: absolute; + content: ""; + inset: 0; + width: calc(var(--width) / 2); + height: 100%; + border-radius: var(--height); + background-color: var(--ifm-color-primary-darkest); + transition: + transform var(--ifm-transition-fast) + var(--ifm-transition-timing-default); + transform: translateX(calc(var(--width) / 2 - var(--border))); +} + +input:focus-visible ~ .checkboxLabel::after { + outline: 2px solid currentcolor; +} + +.checkboxLabel > * { + font-size: 0.8rem; + color: inherit; + transition: opacity 150ms ease-in 50ms; +} + +input:checked ~ .checkboxLabel::after { + transform: translateX(calc(-1 * 2px)); +} diff --git a/src/pages/ecosystem/_components/ShowcaseFilters.jsx b/src/pages/ecosystem/_components/ShowcaseFilters.jsx new file mode 100644 index 00000000..25952a15 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseFilters.jsx @@ -0,0 +1,89 @@ +import {useFilteredList} from "@site/src/pages/ecosystem/_hooks/useFilteredList"; +import {useSiteCountPlural} from "@site/src/pages/ecosystem/_hooks/useSiteCountPlural"; +import clsx from "clsx"; +import styles from "@site/src/pages/ecosystem/styles.module.css"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; +import ShowcaseFilterToggle from "@site/src/pages/ecosystem/_components/ShowcaseFilterToggle"; +import ShowcaseTooltip from "@site/src/pages/ecosystem/_components/ShowcaseTooltip"; +import ShowcaseTagSelect from "@site/src/pages/ecosystem/_components/ShowcaseTagSelect"; +import FavoriteIcon from "@site/src/components/svgIcons/FavoriteIcon"; +import React from "react"; +import {TagList, Tags} from "@site/src/tableData/tags"; + +export default function ShowcaseFilters() { + const filteredUsers = useFilteredList(); + const siteCountPlural = useSiteCountPlural(); + + const languageList = TagList.slice(0, 11); + const pluginList = TagList.slice(11); + + return ( +
    +
    +
    + + Filters + + {siteCountPlural(filteredUsers.length)} +
    + +
    +
    +
      + { + languageList.map((tag, i) => { + return
    • ; + })} +
    +
    +
    +
      + { + pluginList.map((tag, i) => { + return
    • ; + }) + } +
    +
    +
    + ); +} + +function Li({ + tag, +}) { + const {label, description, color} = Tags[tag]; + const id = `showcase_checkbox_id_${tag}`; + + return ( +
  • + + + ) : ( + + ) + } + /> + +
  • + ); +} diff --git a/src/pages/ecosystem/_components/ShowcaseHeader.jsx b/src/pages/ecosystem/_components/ShowcaseHeader.jsx new file mode 100644 index 00000000..e1f7521f --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseHeader.jsx @@ -0,0 +1,23 @@ +import Heading from "@theme/Heading"; +import Link from "@docusaurus/Link"; +import Translate from "@docusaurus/Translate"; +import React from "react"; +import {DESCRIPTION, TITLE} from "@site/src/pages/ecosystem"; +import Tooltip from "@site/src/pages/ecosystem/_components/ShowcaseTooltip"; +const SUBMIT_URL = "https://github.com/casbin/casbin-website-v2"; + +export default function ShowcaseHeader() { + const tooltipText = "fork repository, find specific files in tableData folder, add a new item, make a PR.(click to open tableData folder)"; + + return ( +
    + {TITLE} +

    {DESCRIPTION}

    + + + 🚀 add new one + + +
    + ); +} diff --git a/src/pages/ecosystem/_components/ShowcaseTagSelect/index.jsx b/src/pages/ecosystem/_components/ShowcaseTagSelect/index.jsx new file mode 100644 index 00000000..35bbc4e6 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseTagSelect/index.jsx @@ -0,0 +1,83 @@ +import React, {useCallback, useEffect, useState} from "react"; +import {useHistory, useLocation} from "@docusaurus/router"; + +import styles from "./styles.module.css"; +import {prepareListState} from "@site/src/pages/ecosystem/_components/SearchBar"; + +const TagQueryStringKey = "tags"; + +export function readSearchTags(search) { + return new URLSearchParams(search).getAll(TagQueryStringKey); +} + +function replaceSearchTags(search, newTags) { + const searchParams = new URLSearchParams(search); + searchParams.delete(TagQueryStringKey); + newTags.forEach((tag) => searchParams.append(TagQueryStringKey, tag)); + return searchParams.toString(); +} + +function ShowcaseTagSelect({id, icon, label, tag, ...rest}, ref) { + const location = useLocation(); + const history = useHistory(); + const [selected, setSelected] = useState(false); + useEffect(() => { + const tags = readSearchTags(location.search); + setSelected(tags.includes(tag)); + }, [tag, location]); + const toggleTag = useCallback(() => { + const tags = readSearchTags(location.search); + const newTags = toggleListItem(tags, tag); + + const newSearch = replaceSearchTags(location.search, newTags); + history.push({ + ...location, + search: newSearch, + state: prepareListState(), + }); + }, [tag, location, history]); + return ( + <> + { + if (e.key === "Enter") { + toggleTag(); + } + }} + onFocus={(e) => { + if (e.relatedTarget) { + e.target.nextElementSibling?.dispatchEvent( + new KeyboardEvent("focus") + ); + } + }} + onBlur={(e) => { + e.target.nextElementSibling?.dispatchEvent(new KeyboardEvent("blur")); + }} + onChange={toggleTag} + checked={selected} + {...rest} + /> + + + ); +} + +export default React.forwardRef(ShowcaseTagSelect); + +export function toggleListItem(list, item) { + const itemIndex = list.indexOf(item); + if (itemIndex === -1) { + return list.concat(item); + } + const newList = [...list]; + newList.splice(itemIndex, 1); + + return newList; +} diff --git a/src/pages/ecosystem/_components/ShowcaseTagSelect/styles.module.css b/src/pages/ecosystem/_components/ShowcaseTagSelect/styles.module.css new file mode 100644 index 00000000..39b0cef6 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseTagSelect/styles.module.css @@ -0,0 +1,38 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +.checkboxLabel:hover { + opacity: 1; + box-shadow: 0 0 2px 1px var(--ifm-color-secondary-darkest); +} + +input[type="checkbox"] + .checkboxLabel { + display: flex; + align-items: center; + cursor: pointer; + line-height: 1.5; + border-radius: 4px; + padding: 0.275rem 0.8rem; + opacity: 0.85; + transition: opacity 200ms ease-out; + border: 2px solid var(--ifm-color-secondary-darkest); +} + +input:focus-visible + .checkboxLabel { + outline: 2px solid currentcolor; +} + +input:checked + .checkboxLabel { + opacity: 0.9; + background-color: var(--site-color-checkbox-checked-bg); + border: 2px solid var(--ifm-color-primary-darkest); +} + +input:checked + .checkboxLabel:hover { + opacity: 0.75; + box-shadow: 0 0 2px 1px var(--ifm-color-primary-dark); +} diff --git a/src/pages/ecosystem/_components/ShowcaseTooltip/index.jsx b/src/pages/ecosystem/_components/ShowcaseTooltip/index.jsx new file mode 100644 index 00000000..11fc7cd2 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseTooltip/index.jsx @@ -0,0 +1,131 @@ +import React, {useEffect, useRef, useState} from "react"; +import ReactDOM from "react-dom"; +import {usePopper} from "react-popper"; +import styles from "./styles.module.css"; + +export default function Tooltip({ + children, + id, + anchorEl, + text, +}) { + const [open, setOpen] = useState(false); + const [referenceElement, setReferenceElement] = useState( + null + ); + const [popperElement, setPopperElement] = useState(null); + const [arrowElement, setArrowElement] = useState(null); + const [container, setContainer] = useState(null); + const {styles: popperStyles, attributes} = usePopper( + referenceElement, + popperElement, + { + modifiers: [ + { + name: "arrow", + options: { + element: arrowElement, + }, + }, + { + name: "offset", + options: { + offset: [0, 8], + }, + }, + ], + } + ); + + const timeout = useRef(null); + const tooltipId = `${id}_tooltip`; + + useEffect(() => { + if (anchorEl) { + if (typeof anchorEl === "string") { + setContainer(document.querySelector(anchorEl)); + } else { + setContainer(anchorEl); + } + } else { + setContainer(document.body); + } + }, [container, anchorEl]); + + useEffect(() => { + const showEvents = ["mouseenter", "focus"]; + const hideEvents = ["mouseleave", "blur"]; + + const handleOpen = () => { + // There is no point in displaying an empty tooltip. + if (text === "") { + return; + } + + // Remove the title ahead of time to avoid displaying + // two tooltips at the same time (native + this one). + referenceElement?.removeAttribute("title"); + + timeout.current = window.setTimeout(() => { + setOpen(true); + }, 400); + }; + + const handleClose = () => { + clearInterval(timeout.current); + setOpen(false); + }; + + if (referenceElement) { + showEvents.forEach((event) => { + referenceElement.addEventListener(event, handleOpen); + }); + + hideEvents.forEach((event) => { + referenceElement.addEventListener(event, handleClose); + }); + } + + return () => { + if (referenceElement) { + showEvents.forEach((event) => { + referenceElement.removeEventListener(event, handleOpen); + }); + + hideEvents.forEach((event) => { + referenceElement.removeEventListener(event, handleClose); + }); + } + }; + }, [referenceElement, text]); + + return ( + <> + {React.cloneElement(children, { + ref: setReferenceElement, + "aria-describedby": open ? tooltipId : undefined, + })} + {container + ? ReactDOM.createPortal( + open && ( + + ), + container + ) + : container} + + ); +} diff --git a/src/pages/ecosystem/_components/ShowcaseTooltip/styles.module.css b/src/pages/ecosystem/_components/ShowcaseTooltip/styles.module.css new file mode 100644 index 00000000..9fddba81 --- /dev/null +++ b/src/pages/ecosystem/_components/ShowcaseTooltip/styles.module.css @@ -0,0 +1,45 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +.tooltip { + border-radius: 4px; + padding: 4px 8px; + color: var(--site-color-tooltip); + background: var(--site-color-tooltip-background); + font-size: 0.8rem; + z-index: 500; + line-height: 1.4; + font-weight: 500; + max-width: 300px; + opacity: 0.92; +} + +.tooltipArrow { + visibility: hidden; +} + +.tooltipArrow, +.tooltipArrow::before { + position: absolute; + width: 8px; + height: 8px; + background: inherit; +} + +.tooltipArrow::before { + visibility: visible; + content: ""; + transform: rotate(45deg); +} + +.tooltip[data-popper-placement^="top"] > .tooltipArrow { + bottom: -4px; +} + +.tooltip[data-popper-placement^="bottom"] > .tooltipArrow { + top: -4px; +} diff --git a/src/pages/ecosystem/_hooks/useFilteredList.js b/src/pages/ecosystem/_hooks/useFilteredList.js new file mode 100644 index 00000000..a9abeccb --- /dev/null +++ b/src/pages/ecosystem/_hooks/useFilteredList.js @@ -0,0 +1,62 @@ +import {useLocation} from "@docusaurus/router"; +import {useEffect, useMemo, useState} from "react"; +import {readSearchTags} from "@site/src/pages/ecosystem/_components/ShowcaseTagSelect"; +import {readOperator} from "@site/src/pages/ecosystem/_components/ShowcaseFilterToggle"; +import {sortedList} from "@site/src/tableData/tableData"; + +const SearchNameQueryKey = "name"; + +export function useFilteredList() { + const location = useLocation(); + const [operator, setOperator] = useState("OR"); + // On SSR / first mount (hydration) no tag is selected + const [selectedTags, setSelectedTags] = useState([]); + const [searchName, setSearchName] = useState(null); + // Sync tags from QS to state (delayed on purpose to avoid SSR/Client + // hydration mismatch) + useEffect(() => { + setSelectedTags(readSearchTags(location.search)); + setOperator(readOperator(location.search)); + setSearchName(readSearchName(location.search)); + restoreUserState(location.state); + }, [location]); + + return useMemo( + () => filterList(sortedList, selectedTags, operator, searchName), + [selectedTags, operator, searchName] + ); +} + +function readSearchName(search) { + return new URLSearchParams(search).get(SearchNameQueryKey); +} + +function restoreUserState(userState) { + const {scrollTopPosition, focusedElementId} = userState ?? { + scrollTopPosition: 0, + focusedElementId: undefined, + }; + document.getElementById(focusedElementId)?.focus(); + window.scrollTo({top: scrollTopPosition}); +} + +function filterList(list, selectedTags, operator, searchName) { + if (searchName) { + // eslint-disable-next-line no-param-reassign + list = list.filter((item) => + item.title.toLowerCase().includes(searchName.toLowerCase()) + ); + } + if (selectedTags.length === 0) { + return list; + } + return list.filter((item) => { + if (item.tags.length === 0) { + return false; + } + if (operator === "AND") { + return selectedTags.every((tag) => item.tags.includes(tag)); + } + return selectedTags.some((tag) => item.tags.includes(tag)); + }); +} diff --git a/src/pages/ecosystem/_hooks/useSiteCountPlural.js b/src/pages/ecosystem/_hooks/useSiteCountPlural.js new file mode 100644 index 00000000..aff8662c --- /dev/null +++ b/src/pages/ecosystem/_hooks/useSiteCountPlural.js @@ -0,0 +1,19 @@ +import {usePluralForm} from "@docusaurus/theme-common"; +import {translate} from "@docusaurus/Translate"; + +export function useSiteCountPlural() { + const {selectMessage} = usePluralForm(); + return (sitesCount) => + selectMessage( + sitesCount, + translate( + { + id: "showcase.filters.resultCount", + description: + "Pluralized label for the number of sites found on the showcase. Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)", + message: "1 plugin|{sitesCount} plugins", + }, + {sitesCount} + ) + ); +} diff --git a/src/pages/ecosystem/index.jsx b/src/pages/ecosystem/index.jsx new file mode 100644 index 00000000..92b822ee --- /dev/null +++ b/src/pages/ecosystem/index.jsx @@ -0,0 +1,32 @@ +import React from "react"; + +import {translate} from "@docusaurus/Translate"; +import Layout from "@theme/Layout"; + +import ShowcaseHeader from "@site/src/pages/ecosystem/_components/ShowcaseHeader"; +import ShowcaseFilters from "@site/src/pages/ecosystem/_components/ShowcaseFilters"; +import ShowcaseCards from "@site/src/pages/ecosystem/_components/ShowcaseCards"; +import SearchBar from "@site/src/pages/ecosystem/_components/SearchBar"; + +export const TITLE = translate({message: "Casbin ecosystem"}); +export const DESCRIPTION = translate({ + message: "List of plugins for casbin", +}); + +export default function Showcase() { + return ( + +
    + + +
    + +
    + +
    +
    + ); +} diff --git a/src/pages/ecosystem/styles.module.css b/src/pages/ecosystem/styles.module.css new file mode 100644 index 00000000..af206cf8 --- /dev/null +++ b/src/pages/ecosystem/styles.module.css @@ -0,0 +1,101 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +[type="checkbox"] { + visibility: hidden; + padding: 0; +} + +.filterCheckbox { + justify-content: space-between; +} + +.filterCheckbox, +.checkboxList { + display: flex; + flex-wrap: wrap; + align-items: center; +} + +.filterCheckbox > div:first-child { + display: flex; + flex: 1 1 auto; + align-items: center; +} + +.filterCheckbox > div > * { + margin-bottom: 0; + margin-right: 8px; +} + +.checkboxList { + flex-wrap: wrap; +} + +.checkboxListItem { + user-select: none; + white-space: nowrap; + height: 32px; + font-size: 0.8rem; + margin-top: 0.5rem; + margin-right: 0.5rem; +} + +.checkboxListItem:last-child { + margin-right: 0; +} + +.searchContainer { + margin-left: auto; +} + +.searchContainer input { + height: 30px; + border-radius: 15px; + padding: 10px; + border: 1px solid gray; +} + +.showcaseList { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 24px; +} + +.showcaseFavorite { + padding-top: 2rem; + padding-bottom: 2rem; + background-color: var(--site-color-favorite-background); +} + +.showcaseFavoriteHeader { + display: flex; + align-items: center; +} + +.showcaseFavoriteHeader > h2 { + margin-bottom: 0; +} + +.showcaseFavoriteHeader > svg { + width: 30px; + height: 30px; +} + +.svgIconFavoriteXs, +.svgIconFavorite { + color: var(--site-color-svg-icon-favorite); +} + +.svgIconFavoriteXs { + margin-left: 0.625rem; + font-size: 1rem; +} + +.svgIconFavorite { + margin-left: 1rem; +} diff --git a/src/pages/index.module.css b/src/pages/index.module.css index 4efd3637..026dd6ea 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -10,8 +10,9 @@ text-align: center; position: relative; overflow: hidden; + /* color: var(--ifm-font-color-base); */ - color: #E3E3E3; + color: #e3e3e3; } @media screen and (max-width: 966px) { diff --git a/src/tableData/AdapterData/AdapterData.js b/src/tableData/AdapterData/AdapterData.js new file mode 100644 index 00000000..6fe377ed --- /dev/null +++ b/src/tableData/AdapterData/AdapterData.js @@ -0,0 +1,23 @@ +import {AdapterGoData} from "@site/src/tableData/AdapterData/AdapterGoData"; +import {AdapterJavaData} from "@site/src/tableData/AdapterData/AdapterJavaData"; +import {AdapterNodejsData} from "@site/src/tableData/AdapterData/AdapterNodejsData"; +import {AdapterPhpData} from "@site/src/tableData/AdapterData/AdapterPhpData"; +import {AdapterPythonData} from "@site/src/tableData/AdapterData/AdapterPythonData"; +import {AdapterDotNETData} from "@site/src/tableData/AdapterData/AdapterDotNETData"; +import {AdapterRustData} from "@site/src/tableData/AdapterData/AdapterRustData"; +import {AdapterRubyData} from "@site/src/tableData/AdapterData/AdapterRubyData"; +import {AdapterSwiftData} from "@site/src/tableData/AdapterData/AdapterSwiftData"; +import {AdapterLuaData} from "@site/src/tableData/AdapterData/AdapterLuaData"; + +export const AdapterData = [ + ...AdapterGoData, + ...AdapterJavaData, + ...AdapterNodejsData, + ...AdapterPhpData, + ...AdapterPythonData, + ...AdapterDotNETData, + ...AdapterRustData, + ...AdapterRubyData, + ...AdapterSwiftData, + ...AdapterLuaData, +]; diff --git a/src/tableData/AdapterData/AdapterDotNETData.js b/src/tableData/AdapterData/AdapterDotNETData.js new file mode 100644 index 00000000..835c55af --- /dev/null +++ b/src/tableData/AdapterData/AdapterDotNETData.js @@ -0,0 +1,53 @@ +export const AdapterDotNETData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "/img/ecosystem/file.png", + }, + { + title: "[EF Adapter](https://github.com/casbin-net/EF-Adapter)", + type: "ORM", + author: "Casbin", + autoSave: "❌", + description: + "MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. are supported by [Entity Framework 6](https://docs.microsoft.com/en-us/ef/ef6/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[EFCore Adapter](https://github.com/casbin-net/EFCore-Adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. are supported by [Entity Framework Core](https://docs.microsoft.com/en-us/ef/core/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Linq2DB Adapter](https://github.com/Tirael/Linq2DB-Adapter)", + type: "ORM", + author: "[@Tirael](https://github.com/Tirael)", + autoSave: "✅", + description: + "[MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, Access, Firebird, Sybase, etc.](https://github.com/linq2db/linq2db/blob/master/Tests/Base/TestProvName.cs) are supported by [linq2db](https://github.com/linq2db/linq2db)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Azure Cosmos DB Adapter](https://github.com/sagarkhandelwal/Casbin-Using-Cosmos)", + type: "Cloud", + author: "[@sagarkhandelwal](https://github.com/sagarkhandelwal)", + autoSave: "✅", + description: + "For [Microsoft Azure Cosmos DB](https://docs.microsoft.com/en-us/azure/cosmos-db/introduction)", + image: "/img/ecosystem/cosmosDB.png", + }, +].map((item) => { + return { + ...item, + tags: ["dotNET", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterGoData.js b/src/tableData/AdapterData/AdapterGoData.js new file mode 100644 index 00000000..96ee9efe --- /dev/null +++ b/src/tableData/AdapterData/AdapterGoData.js @@ -0,0 +1,389 @@ +export const AdapterGoData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: null, + }, + { + title: "[Filtered File Adapter (built-in)](/docs/policy-subset-loading)", + type: "File", + author: "[@faceless-saint](https://github.com/faceless-saint)", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files with policy subset loading support", + image: null, + }, + { + title: "[SQL Adapter](https://github.com/Blank-Xu/sql-adapter)", + type: "SQL", + author: "[@Blank-Xu](https://github.com/Blank-Xu)", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQL Server, SQLite3 are supported in `master` branch and Oracle is supported in `oracle` branch by `database/sql`", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Xorm Adapter](https://github.com/casbin/xorm-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, TiDB, SQLite, SQL Server, Oracle are supported by [Xorm](https://github.com/go-xorm/xorm/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[GORM Adapter](https://github.com/casbin/gorm-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, Sqlite3, SQL Server are supported by [GORM](https://github.com/go-gorm/gorm)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[GORM Adapter Ex](https://github.com/casbin/gorm-adapter-ex)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, Sqlite3, SQL Server are supported by [GORM](https://github.com/go-gorm/gorm)", + image: "/img/ecosystem/SQL.png", + + }, + { + title: "[Ent Adapter](https://github.com/casbin/ent-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, MariaDB, PostgreSQL, SQLite, Gremlin-based graph databases are supported by [ent ORM](https://entgo.io/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Beego ORM Adapter](https://github.com/casbin/beego-orm-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, Sqlite3 are supported by [Beego ORM](https://beego.wiki/docs/mvc/model/overview/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[SQLX Adapter](https://github.com/memwey/casbin-sqlx-adapter)", + type: "ORM", + author: "[@memwey](https://github.com/memwey)", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite, Oracle are supported by [SQLX](https://github.com/jmoiron/sqlx)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Sqlx Adapter](https://github.com/Blank-Xu/sqlx-adapter)", + type: "ORM", + author: "[@Blank-Xu](https://github.com/Blank-Xu)", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQL Server, SQLite3 are supported in `master` branch and Oracle is supported in `oracle` branch by [sqlx](https://github.com/jmoiron/sqlx)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[GF ORM Adapter](https://github.com/vance-liu/gdb-adapter)", + type: "ORM", + author: "[@vance-liu](https://github.com/vance-liu)", + autoSave: "✅", + description: + "MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://github.com/gogf/gf/tree/master/contrib/drivers)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[GoFrame ORM Adapter](https://github.com/kotlin2018/adapter)", + type: "ORM", + author: "[@kotlin2018](https://github.com/kotlin2018)", + autoSave: "✅", + description: + "MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://github.com/gogf/gf/tree/master/contrib/drivers)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[gf-adapter](https://github.com/zcyc/gf-adapter)", + type: "ORM", + author: "[@zcyc](https://github.com/zcyc)", + autoSave: "✅", + description: + "MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://github.com/gogf/gf/tree/master/contrib/drivers)", + image: null, + }, + { + title: "[Gdb Adapter](https://github.com/jxo-me/gdb-adapter)", + type: "ORM", + author: "[@jxo-me](https://github.com/jxo-me)", + autoSave: "✅", + description: + "MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://github.com/gogf/gf/tree/master/contrib/drivers)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[GoFrame V2 Adapter](https://github.com/hailaz/gf-casbin-adapter)", + type: "ORM", + author: "[@hailaz](https://github.com/hailaz)", + autoSave: "✅", + description: + "MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by [GoFrame ORM](https://goframe.org/pages/viewpage.action?pageId=1114686)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Filtered PostgreSQL Adapter](https://github.com/casbin/casbin-pg-adapter)", + type: "SQL", + author: "Casbin", + autoSave: "✅", + description: "For [PostgreSQL](https://www.postgresql.org/)", + image: "/img/ecosystem/postgreSQL.png", + }, + { + title: + "[Filtered pgx Adapter](https://github.com/pckhoi/casbin-pgx-adapter)", + type: "SQL", + author: "[@pckhoi](https://github.com/pckhoi)", + autoSave: "✅", + description: + "PostgreSQL is supported by [pgx](https://github.com/jackc/pgx)", + image: "/img/ecosystem/postgreSQL.png", + }, + { + title: + "[PostgreSQL Adapter](https://github.com/cychiuae/casbin-pg-adapter)", + type: "SQL", + author: "[@cychiuae](https://github.com/cychiuae)", + autoSave: "✅", + description: "For [PostgreSQL](https://www.postgresql.org/)", + image: "/img/ecosystem/postgreSQL.png", + }, + { + title: "[RQLite Adapter](https://github.com/edomosystems/rqlite-adapter)", + type: "SQL", + author: "[EDOMO Systems](https://github.com/edomosystems)", + autoSave: "✅", + description: "For [RQLite](https://github.com/rqlite/rqlite/)", + image: "/img/ecosystem/rqlite.png", + }, + { + title: "[MongoDB Adapter](https://github.com/casbin/mongodb-adapter)", + type: "NoSQL", + author: "Casbin", + autoSave: "✅", + description: + "For [MongoDB](https://www.mongodb.com) based on [MongoDB Go Driver](https://github.com/mongodb/mongo-go-driver)", + image: "/img/ecosystem/monogoDB.png", + }, + { + title: + "[RethinkDB Adapter](https://github.com/adityapandey9/rethinkdb-adapter)", + type: "NoSQL", + author: "[@adityapandey9](https://github.com/adityapandey9)", + autoSave: "✅", + description: "For [RethinkDB](https://rethinkdb.com/)", + image: "/img/ecosystem/rethinkDB.png", + }, + { + title: "[Cassandra Adapter](https://github.com/casbin/cassandra-adapter)", + type: "NoSQL", + author: "Casbin", + autoSave: "❌", + description: "For [Apache Cassandra DB](http://cassandra.apache.org)", + image: "/img/ecosystem/cassandra.png", + }, + { + title: "[DynamoDB Adapter](https://github.com/HOOQTV/dynacasbin)", + type: "NoSQL", + author: "[HOOQ](https://github.com/HOOQTV)", + autoSave: "❌", + description: "For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)", + image: "/img/ecosystem/dynamoDB.png", + }, + { + title: "[Dynacasbin](https://github.com/NewbMiao/dynacasbin)", + type: "NoSQL", + author: "[NewbMiao](https://github.com/NewbMiao)", + autoSave: "✅", + description: "For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)", + image: "/img/ecosystem/dynamoDB.png", + }, + { + title: "[ArangoDB Adapter](https://github.com/adamwasila/arangodb-adapter)", + type: "NoSQL", + author: "[@adamwasila](https://github.com/adamwasila)", + autoSave: "✅", + description: "For [ArangoDB](https://www.arangodb.com/)", + image: "/img/ecosystem/arangoDB.png", + }, + { + title: + "[Amazon S3 Adapter](https://github.com/Soluto/casbin-minio-adapter)", + type: "Cloud", + author: "[Soluto](https://github.com/Soluto)", + autoSave: "❌", + description: + "For [Minio](https://github.com/minio/minio) and [Amazon S3](https://aws.amazon.com/s3/)", + image: "/img/ecosystem/amazonS3.png", + }, + { + title: + "[Go CDK Adapter](https://github.com/bartventer/casbin-go-cloud-adapter)", + type: "Cloud", + author: "[@bartventer](https://github.com/bartventer)", + autoSave: "✅", + description: + "Adapter based on [Go Cloud Dev Kit](https://gocloud.dev/) that supports: Amazon DynamoDB, Azure CosmosDB, GCP Firestore, MongoDB, In-Memory", + image: "/img/ecosystem/DB.png", + }, + { + title: + "[Azure Cosmos DB Adapter](https://github.com/spacycoder/cosmos-casbin-adapter)", + type: "Cloud", + author: "[@spacycoder](https://github.com/spacycoder)", + autoSave: "✅", + description: + "For [Microsoft Azure Cosmos DB](https://docs.microsoft.com/en-us/azure/cosmos-db/introduction)", + image: "/img/ecosystem/cosmosDB.png", + }, + { + title: + "[GCP Firestore Adapter](https://github.com/reedom/casbin-firestore-adapter)", + type: "Cloud", + author: "[@reedom](https://github.com/reedom)", + autoSave: "❌", + description: + "For [Google Cloud Platform Firestore](https://cloud.google.com/firestore/)", + image: "/img/ecosystem/firestore.jpeg", + }, + { + title: + "[GCP Cloud Storage Adapter](https://github.com/qurami/casbin-cloud-storage-adapter)", + type: "Cloud", + author: "[qurami](https://github.com/qurami)", + autoSave: "❌", + description: + "For [Google Cloud Platform Cloud Storage](https://cloud.google.com/storage/)", + image: "/img/ecosystem/googleCloudStorage.png", + }, + { + title: + "[GCP Cloud Spanner Adapter](https://github.com/flowerinthenight/casbin-spanner-adapter)", + type: "Cloud", + author: "[@flowerinthenight](https://github.com/flowerinthenight)", + autoSave: "✅", + description: + "For [Google Cloud Platform Cloud Spanner](https://cloud.google.com/spanner/)", + image: "/img/ecosystem/spanner.png", + }, + { + title: "[Consul Adapter](https://github.com/ankitm123/consul-adapter)", + type: "KV store", + author: "[@ankitm123](https://github.com/ankitm123)", + autoSave: "❌", + description: "For [HashiCorp Consul](https://www.consul.io/)", + image: "/img/ecosystem/firestore.jpeg", + }, + { + title: "[Redis Adapter (Redigo)](https://github.com/casbin/redis-adapter)", + type: "KV store", + author: "Casbin", + autoSave: "✅", + description: "For [Redis](https://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: + "[Redis Adapter (go-redis)](https://github.com/mlsen/casbin-redis-adapter)", + type: "KV store", + author: "[@mlsen](https://github.com/mlsen)", + autoSave: "✅", + description: "For [Redis](https://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: "[Etcd Adapter](https://github.com/sebastianliu/etcd-adapter)", + type: "KV store", + author: "[@sebastianliu](https://github.com/sebastianliu)", + autoSave: "❌", + description: "For [etcd](https://github.com/coreos/etcd)", + image: "/img/ecosystem/etcd.png", + }, + { + title: "[BoltDB Adapter](https://github.com/speza/casbin-bolt-adapter)", + type: "KV store", + author: "[@speza](https://github.com/speza)", + autoSave: "✅", + description: "For [Bolt](https://github.com/boltdb/bolt)", + image: "/img/ecosystem/bolt.png", + }, + { + title: "[Bolt Adapter](https://github.com/wirepair/bolt-adapter)", + type: "KV store", + author: "[@wirepair](https://github.com/wirepair)", + autoSave: "❌", + description: "For [Bolt](https://github.com/boltdb/bolt)", + image: "/img/ecosystem/bolt.png", + }, + { + title: + "[BadgerDB Adapter](https://github.com/inits/casbin-badgerdb-adapter)", + type: "KV store", + author: "[@inits](https://github.com/inits)", + autoSave: "✅", + description: "For [BadgerDB](https://github.com/dgraph-io/badger)", + image: "/img/ecosystem/badger.png", + }, + { + title: "[Protobuf Adapter](https://github.com/casbin/protobuf-adapter)", + type: "Stream", + author: "Casbin", + autoSave: "❌", + description: + "For [Google Protocol Buffers](https://developers.google.com/protocol-buffers/)", + image: "/img/ecosystem/protobuf.png", + }, + { + title: "[JSON Adapter](https://github.com/casbin/json-adapter)", + type: "String", + author: "Casbin", + autoSave: "❌", + description: "For [JSON](https://www.json.org/)", + image: "/img/ecosystem/json.png", + }, + { + title: "[String Adapter](https://github.com/qiangmzsx/string-adapter)", + type: "String", + author: "[@qiangmzsx](https://github.com/qiangmzsx)", + autoSave: "❌", + description: "For String", + image: "/img/ecosystem/string.png", + }, + { + title: "[HTTP File Adapter](https://github.com/h4ckedneko/casbin-httpfs)", + type: "HTTP", + author: "[@h4ckedneko](https://github.com/h4ckedneko)", + autoSave: "❌", + description: "For [http.FileSystem](https://golang.org/src/net/http/fs.go)", + image: "/img/ecosystem/http.png", + }, + { + title: "[FileSystem Adapter](https://github.com/naucon/casbin-fs-adapter)", + type: "File", + author: "[@naucon](https://github.com/naucon)", + autoSave: "❌", + description: + "For [fs.FS](https://pkg.go.dev/io/fs) and [embed.FS](https://pkg.go.dev/embed)", + image: "/img/ecosystem/file.png", + }, +].map((item) => { + return { + ...item, + tags: ["Go", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterJavaData.js b/src/tableData/AdapterData/AdapterJavaData.js new file mode 100644 index 00000000..0e5032e6 --- /dev/null +++ b/src/tableData/AdapterData/AdapterJavaData.js @@ -0,0 +1,78 @@ +export const AdapterJavaData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "img/ecosystem/file.png", + }, + { + title: "[JDBC Adapter](https://github.com/jcasbin/jdbc-adapter)", + type: "JDBC", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server are supported by [JDBC](https://docs.oracle.com/cd/E19226-01/820-7688/gawms/index.html)", + image: "img/ecosystem/JDBC.png", + }, + { + title: "[Hibernate Adapter](https://github.com/jcasbin/hibernate-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "Oracle, DB2, SQL Server, Sybase, MySQL, PostgreSQL are supported by [Hibernate](http://www.hibernate.org/)", + image: "img/ecosystem/SQL.png", + }, + { + title: "[MyBatis Adapter](https://github.com/jcasbin/mybatis-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server (the same as JDBC) are supported by [MyBatis 3](https://mybatis.org/mybatis-3/)", + image: "img/ecosystem/mybatis.jpeg", + }, + { + title: "[Hutool Adapter](https://github.com/mapleafgo/jcasbin-extra)", + type: "ORM", + author: "[@mapleafgo](https://github.com/mapleafgo)", + autoSave: "✅", + description: + "MySQL, Oracle, PostgreSQL, SQLite are supported by [Hutool](https://github.com/looly/hutool)", + image: "img/ecosystem/SQL.png", + }, + { + title: + "[MongoDB Adapter](https://github.com/zzl221000/jcasbin-mongo-adapter)", + type: "NoSQL", + author: "Casbin", + autoSave: "✅", + description: + "MongoDB is supported by [mongodb-driver-sync](https://mongodb.github.io/mongo-java-driver/)", + image: "img/ecosystem/monogoDB.png", + }, + { + title: "[DynamoDB Adapter](https://github.com/jcasbin/dynamodb-adapter)", + type: "NoSQL", + author: "Casbin", + autoSave: "❌", + description: "For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)", + image: "img/ecosystem/dynamoDB.png", + }, + { + title: "[Redis Adapter](https://github.com/jcasbin/redis-adapter)", + type: "KV store", + author: "Casbin", + autoSave: "✅", + description: "For [Redis](https://redis.io/)", + image: "img/ecosystem/redis.png", + }, +].map((item) => { + return { + ...item, + tags: ["Java", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterLuaData.js b/src/tableData/AdapterData/AdapterLuaData.js new file mode 100644 index 00000000..a7c3dfea --- /dev/null +++ b/src/tableData/AdapterData/AdapterLuaData.js @@ -0,0 +1,52 @@ +export const AdapterLuaData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "/img/ecosystem/file.png", + }, + { + title: "[Filtered File Adapter (built-in)](/docs/policy-subset-loading)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files with policy subset loading support", + image: "/img/ecosystem/file.png", + }, + { + title: "[LuaSQL Adapter](https://github.com/casbin-lua/luasql-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite3 are supported by [LuaSQL](http://lunarmodules.github.io/luasql/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[4DaysORM Adapter](https://github.com/casbin-lua/4daysorm-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, SQLite3 are supported by [4DaysORM](https://github.com/itdxer/4DaysORM)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[OpenResty Adapter](https://github.com/tom2nonames/lua-resty-casbin-adapter)", + type: "ORM", + author: "[@tom2nonames](https://github.com/tom2nonames)", + autoSave: "✅", + description: "MySQL, PostgreSQL are supported by it", + image: "/img/ecosystem/SQL.png", + }, +].map((item) => { + return { + ...item, + tags: ["Lua", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterMDTable.jsx b/src/tableData/AdapterData/AdapterMDTable.jsx new file mode 100644 index 00000000..006b6aa2 --- /dev/null +++ b/src/tableData/AdapterData/AdapterMDTable.jsx @@ -0,0 +1,15 @@ +import React from "react"; +import CustomMarkdown from "@site/src/components/MarkdownToJsx/CustomMarkdown"; + +export default function AdapterMDTable({data}) { + // 表头 + let markdown = + "| Adapter | Type | Author | AutoSave | Description |\n|---------|------|--------|----------|-------------|\n"; + + // 遍历数据,为每一行添加Markdown格式 + data.forEach((item) => { + markdown += `| ${item.title} | ${item.type} | ${item.author} | ${item.autoSave} | ${item.description} |\n`; + }); + + return {markdown}; +} diff --git a/src/tableData/AdapterData/AdapterNodejsData.js b/src/tableData/AdapterData/AdapterNodejsData.js new file mode 100644 index 00000000..fa1b42dd --- /dev/null +++ b/src/tableData/AdapterData/AdapterNodejsData.js @@ -0,0 +1,165 @@ +export const AdapterNodejsData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "/img/ecosystem/file.png", + }, + { + title: "[Filtered File Adapter (built-in)](/docs/policy-subset-loading)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files with policy subset loading support", + image: "/img/ecosystem/file.png", + }, + { + title: + "[String Adapter (built-in)](https://github.com/casbin/node-casbin/blob/master/src/persist/stringAdapter.ts)", + type: "String", + author: "[@calebfaruki](https://github.com/calebfaruki)", + autoSave: "❌", + description: "For String", + image: "/img/ecosystem/string.png", + }, + { + title: "[Basic Adapter](https://github.com/node-casbin/basic-adapter)", + type: "Native ORM", + author: "Casbin", + autoSave: "✅", + description: + "pg, mysql, mysql2, sqlite3, oracledb, mssql are supported by the adapter itself", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Prisma Adapter](https://github.com/node-casbin/prisma-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, AWS Aurora, Azure SQL are supported by [Prisma](https://www.prisma.io/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Knex Adapter](https://github.com/knex/casbin-knex-adapter)", + type: "ORM", + author: "[knex](https://github.com/knex)", + autoSave: "✅", + description: + "MSSQL, MySQL, PostgreSQL, SQLite3, Oracle are supported by [Knex.js](https://knexjs.org/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Objection.js Adapter](https://github.com/willsoto/casbin-objection-adapter)", + type: "ORM", + author: "[@willsoto](https://github.com/willsoto)", + autoSave: "✅", + description: + "MSSQL, MySQL, PostgreSQL, SQLite3, Oracle are supported by [Objection.js](https://vincit.github.io/objection.js/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[MikroORM Adapter](https://github.com/baisheng/casbin-mikroorm-adapter)", + type: "ORM", + author: "[@baisheng](https://github.com/baisheng)", + autoSave: "✅", + description: + "MongoDB, MySQL, MariaDB, PostgreSQL, SQLite are supported by [MikroORM](https://mikro-orm.io/)", + }, + { + title: + "[Node PostgreSQL Native Adapter](https://github.com/touchifyapp/casbin-pg-adapter)", + type: "SQL", + author: "[@touchifyapp](https://github.com/touchifyapp)", + autoSave: "✅", + description: + "PostgreSQL adapter with advanced policy subset loading support and improved performances built with [node-postgres](https://node-postgres.com/).", + }, + { + title: + "[Mongoose Adapter](https://github.com/node-casbin/mongoose-adapter)", + type: "NoSQL", + author: "[elastic.io](https://github.com/elasticio) and Casbin", + autoSave: "✅", + description: "MongoDB is supported by [Mongoose](https://mongoosejs.com/)", + }, + { + title: + "[Mongoose Adapter (No-Transaction)](https://github.com/minhducck/casbin-mongoose-adapter)", + type: "NoSQL", + author: "[minhducck](https://github.com/minhducck)", + autoSave: "✅", + description: "MongoDB is supported by [Mongoose](https://mongoosejs.com/)", + }, + { + title: + "[Node MongoDB Native Adapter](https://github.com/juicycleff/casbin-mongodb-adapter)", + type: "NoSQL", + author: "[@juicycleff](https://github.com/juicycleff)", + autoSave: "✅", + description: + "For [Node MongoDB Native](https://mongodb.github.io/node-mongodb-native/)", + }, + { + title: + "[DynamoDB Adapter](https://github.com/fospitia/casbin-dynamodb-adapter)", + type: "NoSQL", + author: "[@fospitia](https://github.com/fospitia)", + autoSave: "✅", + description: "For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)", + }, + { + title: + "[Couchbase Adapter](https://github.com/MarkMYoung/casbin-couchbase-adapter)", + type: "NoSQL", + author: "[@MarkMYoung](https://github.com/MarkMYoung)", + autoSave: "✅", + description: "For [Couchbase](https://www.couchbase.com/)", + }, + { + title: "[Redis Adapter](https://github.com/node-casbin/redis-adapter)", + type: "KV store", + author: "Casbin", + autoSave: "❌", + description: "For [Redis](https://redis.io/)", + }, + { + title: + "[Redis Adapter](https://github.com/NandaKishorJeripothula/node-casbin-redis-adapter)", + type: "KV store", + author: + "[@NandaKishorJeripothula](https://github.com/NandaKishorJeripothula)", + autoSave: "❌", + description: "For [Redis](https://redis.io/)", + }, +].map((item) => { + return { + ...item, + tags: ["NodeJS", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterPhpData.js b/src/tableData/AdapterData/AdapterPhpData.js new file mode 100644 index 00000000..c7c411ff --- /dev/null +++ b/src/tableData/AdapterData/AdapterPhpData.js @@ -0,0 +1,91 @@ +export const AdapterPhpData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "/img/ecosystem/file.png", + }, + { + title: "[Database Adapter](https://github.com/php-casbin/database-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [techone/database](https://github.com/techoner/database)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Zend Db Adapter](https://github.com/php-casbin/zend-db-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite, Oracle, IBM DB2, Microsoft SQL Server, Other PDO Driver are supported by [zend-db](https://docs.zendframework.com/zend-db/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Doctrine DBAL Adapter (Recommend)](https://github.com/php-casbin/dbal-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "Powerful PHP database abstraction layer ([DBAL](https://github.com/doctrine/dbal)) with many features for database schema introspection and management.", + image: "/img/ecosystem/DBAL.png", + }, + { + title: "[Medoo Adapter](https://github.com/php-casbin/medoo-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "[Medoo](https://github.com/catfan/Medoo) is a lightweight PHP Database Framework to Accelerate Development, supports all SQL databases, including `MySQL`, `MSSQL`, `SQLite`, `MariaDB`, `PostgreSQL`, `Sybase`, `Oracle` and more.", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Laminas-db Adapter](https://github.com/php-casbin/laminas-db-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft SQL Server, PDO, etc. are supported by [laminas-db](https://github.com/laminas/laminas-db)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Zend-db Adapter](https://github.com/php-casbin/zend-db-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft SQL Server, PDO, etc. are supported by [zend-db](https://github.com/zendframework/zend-db)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[ThinkORM Adapter (ThinkPHP)](https://github.com/getandpost/tp3-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite, Oracle, Microsoft SQL Server, MongoDB are supported by [ThinkORM](https://github.com/top-think/think-orm)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Redis Adapter](https://github.com/nsnake/CasbinAdapter-Redis-Adapter)", + type: "KV store", + author: "[@nsnake](https://github.com/nsnake)", + autoSave: "❌", + description: "For [Redis](https://redis.io/)", + image: "/img/ecosystem/redis.png", + }, +].map((item) => { + return { + ...item, + tags: ["PHP", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterPythonData.js b/src/tableData/AdapterData/AdapterPythonData.js new file mode 100644 index 00000000..0cf1e78c --- /dev/null +++ b/src/tableData/AdapterData/AdapterPythonData.js @@ -0,0 +1,168 @@ +export const AdapterPythonData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "/img/ecosystem/file.png", + }, + { + title: + "[Django ORM Adapter](https://github.com/pycasbin/django-orm-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "PostgreSQL, MariaDB, MySQL, Oracle, SQLite, IBM DB2, Microsoft SQL Server, Firebird, ODBC are supported by [Django ORM](https://docs.djangoproject.com/en/3.0/ref/databases/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[SQLObject Adapter](https://github.com/pycasbin/sqlobject-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite, Microsoft SQL Server, Firebird, Sybase, MAX DB, pyfirebirdsql are supported by [SQLObject](http://www.sqlobject.org/index.html)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[SQLAlchemy Adapter](https://github.com/pycasbin/sqlalchemy-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by [SQLAlchemy](https://www.sqlalchemy.org/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Async SQLAlchemy Adapter](https://github.com/pycasbin/async-sqlalchemy-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by [SQLAlchemy](https://www.sqlalchemy.org/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Async Databases Adapter](https://github.com/pycasbin/casbin-databases-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by [Databases](https://www.encode.io/databases/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Peewee Adapter](https://github.com/shblhy/peewee-adapter)", + type: "ORM", + author: "[@shblhy](https://github.com/shblhy)", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite are supported by [Peewee](http://docs.peewee-orm.com/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[MongoEngine Adapter](https://github.com/zhangbailong945/mongoengine_adapter)", + type: "ORM", + author: "[@zhangbailong945](https://github.com/zhangbailong945)", + autoSave: "❌", + description: + "MongoDB is supported by [MongoEngine](http://mongoengine.org/)", + image: "/img/ecosystem/monogoEngine.png", + }, + { + title: + "[Pony ORM Adapter](https://github.com/drorvinkler/pycasbin-pony-adapter)", + type: "ORM", + author: "[@drorvinkler](https://github.com/drorvinkler)", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite, Oracle, CockroachDB are supported by [Pony ORM](https://ponyorm.org/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Tortoise ORM Adapter](https://github.com/thearchitector/casbin-tortoise-adapter)", + type: "ORM", + author: "[@thearchitector](https://github.com/thearchitector)", + autoSave: "✅", + description: + "PostgreSQL (>=9.4), MySQL, MariaDB, and SQLite are supported by [Tortoise ORM](https://tortoise.github.io/databases.html)", + image: "/img/ecosystem/postgreSQL.png", + }, + { + title: + "[Async Ormar Adapter](https://github.com/shepilov-vladislav/ormar-casbin-adapter)", + type: "ORM", + author: "[@shepilov-vladislav](https://github.com/shepilov-vladislav)", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite are supported by [Ormar](https://github.com/collerek/ormar/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[SQLModel Adapter](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter)", + type: "ORM", + author: "[@shepilov-vladislav](https://github.com/shepilov-vladislav)", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite are supported by [SQLModel](https://github.com/tiangolo/sqlmodel)", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Couchbase Adapter](https://github.com/ScienceLogic/casbin-couchbase-adapter)", + type: "NoSQL", + author: "[ScienceLogic](https://github.com/ScienceLogic)", + autoSave: "✅ (without `remove_filtered_policy()`)", + description: "For [Couchbase](https://www.couchbase.com/)", + image: "/img/ecosystem/couchBase.png", + }, + { + title: "[DynamoDB Adapter](https://github.com/abqadeer/python-dycasbin)", + type: "NoSQL", + author: "[@abqadeer](https://github.com/abqadeer/)", + autoSave: "✅", + description: "For [DynamoDB](https://aws.amazon.com/dynamodb/)", + image: "/img/ecosystem/dynamoDB.png", + }, + { + title: "[Pymongo Adapter](https://github.com/pycasbin/pymongo-adapter)", + type: "NoSQL", + author: "Casbin", + autoSave: "❌", + description: + "MongoDB is supported by [Pymongo](https://pypi.org/project/pymongo/)", + image: "/img/ecosystem/monogoDB.png", + }, + { + title: "[Redis Adapter](https://github.com/pycasbin/redis-adapter)", + type: "KV store", + author: "Casbin", + autoSave: "✅", + description: "For [Redis](https://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: + "[GCP Firebase Adapter](https://github.com/devrushi41/pycasbin-firebase-adapter)", + type: "Cloud", + author: "[@devrushi41](https://github.com/devrushi41)", + autoSave: "✅", + description: + "For [Google Cloud Platform Firebase](https://firebase.google.com/)", + image: "/img/ecosystem/firestore.jpeg", + }, +].map((item) => { + return { + ...item, + tags: ["Python", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterRubyData.js b/src/tableData/AdapterData/AdapterRubyData.js new file mode 100644 index 00000000..cf47c9e3 --- /dev/null +++ b/src/tableData/AdapterData/AdapterRubyData.js @@ -0,0 +1,26 @@ +export const AdapterRubyData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "/img/ecosystem/file.png", + }, + { + title: + "[Sequel Adapter](https://github.com/CasbinRuby/casbin-ruby-sql-adapter)", + type: "ORM", + author: "[CasbinRuby](https://github.com/CasbinRuby)", + autoSave: "✅", + description: + "[ADO, Amalgalite, IBM_DB, JDBC, MySQL, Mysql2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3, and TinyTDS](http://sequel.jeremyevans.net/) are supported by [Sequel](http://sequel.jeremyevans.net/)", + image: "/img/ecosystem/SQL.png", + }, +].map((item) => { + return { + ...item, + tags: ["Ruby", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterRustData.js b/src/tableData/AdapterData/AdapterRustData.js new file mode 100644 index 00000000..01b31d4c --- /dev/null +++ b/src/tableData/AdapterData/AdapterRustData.js @@ -0,0 +1,96 @@ +export const AdapterRustData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "/img/ecosystem/file.png", + }, + { + title: "[Diesel Adapter](https://github.com/casbin-rs/diesel-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "[SQLite, PostgreSQL, MySQL](https://github.com/diesel-rs/diesel/blob/master/guide_drafts/backend_installation.md) are supported by [Diesel](http://diesel.rs/)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[Sqlx Adapter](https://github.com/casbin-rs/sqlx-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "PostgreSQL, MySQL are supported by [Sqlx](https://github.com/launchbadge/sqlx) with fully asynchronous operation", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[SeaORM Adapter](https://github.com/lingdu1234/sea_orm_casbin_adapter)", + type: "ORM", + author: "[@lingdu1234](https://github.com/lingdu1234)", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite are supported by [SeaORM](https://github.com/SeaQL/sea-orm) with fully asynchronous operation", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[SeaORM Adapter](https://github.com/ZihanType/sea-orm-adapter)", + type: "ORM", + author: "[@ZihanType](https://github.com/ZihanType)", + autoSave: "✅", + description: + "PostgreSQL, MySQL, SQLite are supported by [SeaORM](https://github.com/SeaQL/sea-orm) with fully asynchronous operation", + image: "/img/ecosystem/SQL.png", + }, + { + title: + "[Rbatis Adapter](https://github.com/jiashiwen/casbin-rbatis-adapter)", + type: "ORM", + author: "[rbatis](https://github.com/rbatis)", + autoSave: "✅", + description: + "MySQL, PostgreSQL, SQLite, SQL Server, MariaDB, TiDB, CockroachDB, Oracle are supported by [Rbatis](https://github.com/rbatis/rbatis)", + image: "/img/ecosystem/SQL.png", + }, + { + title: "[DynamodDB Adapter](https://github.com/fospitia/dynamodb-adapter)", + type: "NoSQL", + author: "[@fospitia](https://github.com/fospitia)", + autoSave: "✅", + description: "For [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)", + image: "/img/ecosystem/dynamoDB.png", + }, + { + title: + "[MongoDB Adapter](https://github.com/wangjun861205/nb-mongo-adapter)", + type: "MongoDB", + author: "[@wangjun861205](https://github.com/wangjun861205)", + autoSave: "✅", + description: "For [MongoDB](https://www.mongodb.com)", + image: "/img/ecosystem/monogoDB.png", + }, + { + title: "[JSON Adapter](http://github.com/casbin-rs/json-adapter)", + type: "String", + author: "Casbin", + autoSave: "✅", + description: "For [JSON](https://json.org/)", + image: "/img/ecosystem/json.png", + }, + { + title: "[YAML Adapter](https://github.com/casbin-rs/yaml-adapter)", + type: "String", + author: "Casbin", + autoSave: "✅", + description: "For [YAML](https://yaml.org/)", + image: "/img/ecosystem/yaml.png", + }, +].map((item) => { + return { + ...item, + tags: ["Rust", "Adapter"], + }; +}); diff --git a/src/tableData/AdapterData/AdapterSwiftData.js b/src/tableData/AdapterData/AdapterSwiftData.js new file mode 100644 index 00000000..43a459fa --- /dev/null +++ b/src/tableData/AdapterData/AdapterSwiftData.js @@ -0,0 +1,34 @@ +export const AdapterSwiftData = [ + { + title: "[File Adapter (built-in)](/docs/adapters#file-adapter-built-in)", + type: "File", + author: "Casbin", + autoSave: "❌", + description: + "For [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files", + image: "/img/ecosystem/file.png", + }, + { + title: + "[Memory Adapter (built-in)](https://github.com/casbin/SwiftCasbin/blob/master/Sources/Casbin/Adapter/MemoryAdapter.swift)", + type: "Memory", + author: "Casbin", + autoSave: "❌", + description: "For memory", + image: "/img/ecosystem/memory.png", + }, + { + title: "[Fluent Adapter](https://github.com/SwiftCasbin/fluent-adapter)", + type: "ORM", + author: "Casbin", + autoSave: "✅", + description: + "[PostgreSQL, SQLite, MySQL, MongoDB](https://docs.vapor.codes/4.0/fluent/overview/#drivers) are supported by [Fluent](https://github.com/vapor/fluent)", + image: "/img/ecosystem/SQL.png", + }, +].map((item) => { + return { + ...item, + tags: ["Swift", "Adapter"], + }; +}); diff --git a/src/tableData/DispatcherData/DispatcherData.js b/src/tableData/DispatcherData/DispatcherData.js new file mode 100644 index 00000000..c845dabf --- /dev/null +++ b/src/tableData/DispatcherData/DispatcherData.js @@ -0,0 +1,3 @@ +import {DispatcherGoData} from "@site/src/tableData/DispatcherData/DispatcherGoData"; + +export const DispatcherData = [...DispatcherGoData]; diff --git a/src/tableData/DispatcherData/DispatcherGoData.js b/src/tableData/DispatcherData/DispatcherGoData.js new file mode 100644 index 00000000..12206e6d --- /dev/null +++ b/src/tableData/DispatcherData/DispatcherGoData.js @@ -0,0 +1,24 @@ +export const DispatcherGoData = [ + { + title: + "[Hashicorp Raft Dispatcher](https://github.com/casbin/hraft-dispatcher)", + type: "Raft", + author: "Casbin", + description: + "A dispatcher based on [Hashicorp Raft](https://github.com/hashicorp/raft)", + image: "/img/ecosystem/hashicorp.png", + }, + { + title: + "[KDKYG/casbin-dispatcher](https://github.com/KDKYG/casbin-dispatcher)", + type: "Raft", + author: "[@KDKYG](https://github.com/KDKYG)", + description: + "A dispatcher based on [Hashicorp Raft](https://github.com/hashicorp/raft)", + }, +].map((item) => { + return { + ...item, + tags: ["Go", "Dispatcher"], + }; +}); diff --git a/src/tableData/DispatcherData/DispatcherMDTable.jsx b/src/tableData/DispatcherData/DispatcherMDTable.jsx new file mode 100644 index 00000000..722d8271 --- /dev/null +++ b/src/tableData/DispatcherData/DispatcherMDTable.jsx @@ -0,0 +1,15 @@ +import React from "react"; +import CustomMarkdown from "@site/src/components/MarkdownToJsx/CustomMarkdown"; + +export default function DispatcherMDTable({data}) { + // 表头 + let markdown = + "| Adapter | Type | Author | Description |\n|---------|------|-------|-------------|\n"; + + // 遍历数据,为每一行添加Markdown格式 + data.forEach((item) => { + markdown += `| ${item.title} | ${item.type} | ${item.author} | ${item.description} |\n`; + }); + + return {markdown}; +} diff --git a/src/tableData/MiddlewareData/MiddlewareCppData.js b/src/tableData/MiddlewareData/MiddlewareCppData.js new file mode 100644 index 00000000..e8ca1951 --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareCppData.js @@ -0,0 +1,13 @@ +export const MiddlewareCppData = [ + { + title: "[Nginx](https://nginx.org/)", + description: + "A HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, via plugin: [nginx-casbin-module](https://github.com/casbin-cpp/nginx-casbin-module)", + image: "/img/ecosystem/nginx.png", + }, +].map((item) => { + return { + ...item, + tags: ["Cpp", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewareData.js b/src/tableData/MiddlewareData/MiddlewareData.js new file mode 100644 index 00000000..58c7be1b --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareData.js @@ -0,0 +1,23 @@ +import {MiddlewareGoData} from "@site/src/tableData/MiddlewareData/MiddlewareGoData"; +import {MiddlewareJavaData} from "@site/src/tableData/MiddlewareData/MiddlewareJavaData"; +import {MiddlewareNodejsData} from "@site/src/tableData/MiddlewareData/MiddlewareNodejsData"; +import {MiddlewarePhpData} from "@site/src/tableData/MiddlewareData/MiddlewarePhpData"; +import {MiddlewarePythonData} from "@site/src/tableData/MiddlewareData/MiddlewarePythonData"; +import {MiddlewareCppData} from "@site/src/tableData/MiddlewareData/MiddlewareCppData"; +import {MiddlewareDotNETData} from "@site/src/tableData/MiddlewareData/MiddlewareDotNETData"; +import {MiddlewareRustData} from "@site/src/tableData/MiddlewareData/MiddlewareRustData"; +import {MiddlewareLuaData} from "@site/src/tableData/MiddlewareData/MiddlewareLuaData"; +import {MiddlewareSwiftData} from "@site/src/tableData/MiddlewareData/MiddlewareSwiftData"; + +export const MiddlewareData = [ + ...MiddlewareGoData, + ...MiddlewareJavaData, + ...MiddlewareNodejsData, + ...MiddlewarePhpData, + ...MiddlewarePythonData, + ...MiddlewareCppData, + ...MiddlewareDotNETData, + ...MiddlewareRustData, + ...MiddlewareLuaData, + ...MiddlewareSwiftData, +]; diff --git a/src/tableData/MiddlewareData/MiddlewareDotNETData.js b/src/tableData/MiddlewareData/MiddlewareDotNETData.js new file mode 100644 index 00000000..e27769f7 --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareDotNETData.js @@ -0,0 +1,19 @@ +export const MiddlewareDotNETData = [ + { + title: "[ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core)", + description: + "An open-source and cross-platform framework for building modern cloud based internet connected applications, such as web apps, IoT apps and mobile backends, via plugin: [Casbin.AspNetCore](https://github.com/casbin-net/Casbin.AspNetCore)", + image: "/img/ecosystem/asp.jpeg", + }, + { + title: "[ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core)", + description: + "A simple demo of using Casbin at ASP.NET Core framework, via plugin: [CasbinACL-aspNetCore](https://github.com/MustafaMustafayev/CasbinACL-aspNetCore)", + image: "/img/ecosystem/asp.jpeg", + }, +].map((item) => { + return { + ...item, + tags: ["dotNET", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewareGoData.js b/src/tableData/MiddlewareData/MiddlewareGoData.js new file mode 100644 index 00000000..a6f0a522 --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareGoData.js @@ -0,0 +1,123 @@ +export const MiddlewareGoData = [ + { + title: "[Gin](https://github.com/gin-gonic/gin)", + description: + "A HTTP web framework featuring a Martini-like API with much better performance, via plugin: [authz](https://github.com/gin-contrib/authz) or [gin-casbin](https://github.com/maxwellhertz/gin-casbin)", + image: "/img/ecosystem/gin.jpeg", + }, + { + title: "[Beego](https://github.com/beego/beego)", + description: + "An open-source, high-performance web framework for Go, via built-in plugin: [plugins/authz](https://github.com/astaxie/beego/blob/master/plugins/authz)", + image: "/img/ecosystem/beego.png", + }, + { + title: "[Caddy](https://github.com/caddyserver/caddy)", + description: + "Fast, cross-platform HTTP/2 web server with automatic HTTPS, via plugin: [caddy-authz](https://github.com/casbin/caddy-authz)", + image: "/img/ecosystem/caddy.jpeg", + }, + { + title: "[Traefik](https://github.com/traefik/traefik)", + description: + "The cloud native application proxy, via plugin: [traefik-auth-plugin](https://github.com/Knight-7/auth-plugin)", + image: "/img/ecosystem/traefik.png", + }, + { + title: "[Kratos](https://github.com/go-kratos/kratos)", + description: + "Your ultimate Go microservices framework for the cloud-native era, via plugin: [tx7do/kratos-casbin](https://github.com/tx7do/kratos-casbin) or [overstarry/kratos-casbin](https://github.com/overstarry/kratos-casbin)", + image: "/img/ecosystem/kratos.png", + }, + { + title: "[Go kit](https://github.com/go-kit/kit)", + description: + "A toolkit for microservices, via built-in plugin: [plugins/authz](https://github.com/go-kit/kit/tree/master/auth/casbin)", + image: "/img/ecosystem/gokit.png", + }, + { + title: "[Fiber](https://github.com/gofiber/fiber)", + description: + "An Express inspired web framework written in Go, via middleware: [casbin in gofiber/contrib](https://github.com/gofiber/contrib/tree/main/casbin) or [fiber-casbinrest](https://github.com/prongbang/fiber-casbinrest) or [fiber-boilerplate](https://github.com/sujit-baniya/fiber-boilerplate) or [gofiber-casbin](https://github.com/pcminh0505/gofiber-casbin)", + image: "/img/ecosystem/fiber.png", + }, + { + title: "[Revel](https://github.com/revel/revel)", + description: + "A high productivity, full-stack web framework for the Go language, via plugin: [auth/casbin](https://github.com/revel/modules/tree/master/auth/casbin)", + image: "/img/ecosystem/revel.png", + }, + { + title: "[Echo](https://github.com/labstack/echo)", + description: + "High performance, minimalist Go web framework, via plugin: [echo-authz](https://github.com/labstack/echo-contrib/tree/master/casbin) or [echo-casbin](https://github.com/alexferl/echo-casbin) or [casbinrest](https://github.com/prongbang/casbinrest) or [echo-boilerplate](https://github.com/alexferl/echo-boilerplate)", + image: "/img/ecosystem/echo.png", + }, + { + title: "[Iris](https://github.com/kataras/iris)", + description: + "The fastest web framework for Go in (THIS) Earth. HTTP/2 Ready-To-GO, via plugin: [casbin](https://github.com/iris-contrib/middleware/tree/master/casbin) or [iris-middleware-casbin](https://github.com/kokobing/iris-middleware-casbin)", + image: "/img/ecosystem/iris.png", + }, + { + title: "[GoFrame](https://github.com/gogf/gf)", + description: + "A modular, powerful, high-performance and enterprise-class application development framework of Golang, via plugin: [gf-casbin](https://github.com/dobyte/gf-casbin)", + image: "/img/ecosystem/goframe.png", + }, + { + title: "[Negroni](https://github.com/urfave/negroni)", + description: + "Idiomatic HTTP Middleware for Golang, via plugin: [negroni-authz](https://github.com/casbin/negroni-authz)", + image: null, + }, + { + title: "[Chi](https://github.com/pressly/chi)", + description: + "A lightweight, idiomatic and composable router for building HTTP services, via plugin: [chi-authz](https://github.com/casbin/chi-authz)", + image: "/img/ecosystem/chi.png", + }, + { + title: "[Buffalo](https://github.com/gobuffalo/buffalo)", + description: + "A Go web development eco-system, designed to make your life easier, via plugin: [buffalo-mw-rbac](https://github.com/kgosse/buffalo-mw-rbac)", + image: "/img/ecosystem/buffalo.jpeg", + }, + { + title: "[Macaron](https://github.com/go-macaron/macaron)", + description: + "A high productive and modular web framework in Go, via plugin: [authz](https://github.com/go-macaron/authz)", + image: "/img/ecosystem/macaron.png", + }, + { + title: "[DotWeb](https://github.com/devfeel/dotweb)", + description: + "Simple and easy go web micro framework, via plugin: [authz](https://github.com/devfeel/middleware/tree/master/authz)", + }, + { + title: "[Tango](https://github.com/lunny/tango)", + description: + "Micro & pluggable web framework for Go, via plugin: [authz](https://gitea.com/tango/authz)", + }, + { + title: "[Baa](https://github.com/go-baa/baa)", + description: + "An express Go web framework with routing, middleware, dependency injection and http context, via plugin: [authz](https://github.com/baa-middleware/authz)", + }, + { + title: "[Tyk](https://github.com/TykTechnologies/tyk)", + description: + "An open source Enterprise API Gateway, supporting REST, GraphQL, TCP and gRPC protocols, via plugin: [tyk-authz](https://github.com/casbin/tyk-authz)", + }, + { + title: "[Hertz](https://github.com/cloudwego/hertz)", + description: + "Go HTTP framework with high-performance and strong-extensibility for building micro-services, via plugin: [casbin](https://github.com/hertz-contrib/casbin)", + image: "/img/ecosystem/hertz.png", + }, +].map((item) => { + return { + ...item, + tags: ["Go", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewareJavaData.js b/src/tableData/MiddlewareData/MiddlewareJavaData.js new file mode 100644 index 00000000..b5156799 --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareJavaData.js @@ -0,0 +1,35 @@ +export const MiddlewareJavaData = [ + { + title: "[Spring Boot](https://projects.spring.io/spring-boot/)", + description: + "Makes it easy to create Spring-powered applications and services, via plugin: [casbin-spring-boot-starter](https://github.com/jcasbin/casbin-spring-boot-starter) or [Simple SpringBoot security demo with jCasbin](https://github.com/jveverka/spring-examples/tree/master/spring-jcasbin)", + image: "/img/ecosystem/springboot.png", + }, + { + title: "[Apache Shiro](https://shiro.apache.org/)", + description: + "A powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management, via plugin: [shiro-casbin](https://github.com/jcasbin/shiro-casbin) or [shiro-jcasbin-spring-boot-starter](https://github.com/mapleafgo/shiro-jcasbin-spring-boot-starter)", + image: "/img/ecosystem/shiro.jpeg", + }, + { + title: "[JFinal](http://www.jfinal.com/)", + description: + "A simple, light, rapid, independent and extensible Java WEB + ORM framework, via plugin: [jfinal-authz](https://github.com/jcasbin/jfinal-authz)", + }, + { + title: "[Nutz](https://nutzam.com/)", + description: + "Web framework (MVC/IOC/AOP/DAO/JSON) for all Java developers, via plugin: [nutz-authz](https://github.com/jcasbin/nutz-authz)", + image: "/img/ecosystem/nuzt.png", + }, + { + title: "[mangoo I/O](https://github.com/svenkubiak/mangooio)", + description: + "An intuitive, lightweight, high performance full stack Java web framework, via built-in plugin: [AuthorizationService.java](https://github.com/svenkubiak/mangooio/blob/e8c647a3f7c427bce27377025bec074f6d767f50/mangooio-core/src/main/java/io/mangoo/services/AuthorizationService.java)", + }, +].map((item) => { + return { + ...item, + tags: ["Java", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewareLuaData.js b/src/tableData/MiddlewareData/MiddlewareLuaData.js new file mode 100644 index 00000000..d154f2d6 --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareLuaData.js @@ -0,0 +1,25 @@ +export const MiddlewareLuaData = [ + { + title: "[OpenResty](https://openresty.org/)", + description: + "A dynamic web platform based on NGINX and LuaJIT, via plugin: [lua-resty-casbin](https://github.com/casbin-lua/lua-resty-casbin) and [casbin-openresty-example](https://github.com/rushitote/casbin-openresty-example)", + image: "/img/ecosystem/openResty.png", + }, + { + title: "[Kong](https://github.com/Kong/kong)", + description: + "A cloud-native, platform-agnostic, scalable API Gateway distinguished for its high performance and extensibility via plugins, via plugin: [kong-authz](https://github.com/casbin-lua/kong-authz)", + image: "/img/ecosystem/openResty.png", + }, + { + title: "[APISIX](https://github.com/apache/apisix)", + description: + "A dynamic, real-time, high-performance API gateway, via plugin: [authz-casbin](https://github.com/apache/apisix/blob/master/docs/en/latest/plugins/authz-casbin.md)", + image: "/img/ecosystem/apisix.png", + }, +].map((item) => { + return { + ...item, + tags: ["Lua", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewareMDTable.jsx b/src/tableData/MiddlewareData/MiddlewareMDTable.jsx new file mode 100644 index 00000000..6ba742af --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareMDTable.jsx @@ -0,0 +1,14 @@ +import React from "react"; +import CustomMarkdown from "@site/src/components/MarkdownToJsx/CustomMarkdown"; + +export default function MiddlewareMDTable({data}) { + // 表头 + let markdown = "| Name | Description |\n|---------|-------------|\n"; + + // 遍历数据,为每一行添加Markdown格式 + data.forEach((item) => { + markdown += `| ${item.title} | ${item.description} |\n`; + }); + + return {markdown}; +} diff --git a/src/tableData/MiddlewareData/MiddlewareNodejsData.js b/src/tableData/MiddlewareData/MiddlewareNodejsData.js new file mode 100644 index 00000000..e62b4cd6 --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareNodejsData.js @@ -0,0 +1,63 @@ +export const MiddlewareNodejsData = [ + { + title: "[Shield](https://github.com/odpf/shield)", + description: + "An authZ server and authZ aware reverse-proxy built on top of casbin.", + image: "/img/ecosystem/express.png", + }, + { + title: "[Express](https://github.com/expressjs/express)", + description: + "Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz)", + image: "/img/ecosystem/express.png", + }, + { + title: "[Koa](https://github.com/koajs/koa)", + description: + "Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) or [koajs-starter](https://github.com/djordjep/koajs-starter) or [koa-casbin](https://github.com/zcong1993/koa-casbin)", + image: "/img/ecosystem/koa.png", + }, + { + title: "[LoopBack 4](https://github.com/koajs/koa)", + description: + "A highly extensible Node.js and TypeScript framework for building APIs and microservices, via plugin: [loopback4-authorization](https://github.com/sourcefuse/loopback4-authorization)", + image: "/img/ecosystem/loopback.png", + }, + { + title: "[Nest](https://nestjs.com/)", + description: + "Progressive Node.js framework for building efficient and scalable server-side applications on top of TypeScript & JavaScript. via plugin: [nest-authz](https://github.com/dreamdevil00/nest-authz) or [nest-casbin](https://github.com/pardjs/nest-casbin) or [NestJS Casbin Module](https://github.com/switchit-conseil/nestjs-casbin-module) or [nestjs-casbin](https://github.com/juicycleff/nestjs-casbin) or [acl-nest](https://github.com/Twiddlle/acl-nest) or [nestjs-casbin-typeorm](https://github.com/0xb4lamx/nestjs-casbin-typeorm)", + image: "/img/ecosystem/nest.png", + }, + + { + title: "[Fastify](https://github.com/fastify/fastify)", + description: + "Fast and low overhead web framework, for Node.js. via plugin: [fastify-casbin](https://github.com/nearform/fastify-casbin) or [fastify-casbin-rest](https://github.com/nearform/fastify-casbin-rest)", + image: "/img/ecosystem/fastify.png", + }, + { + title: "[Egg](https://github.com/eggjs/egg)", + description: + "Born to build better enterprise frameworks and apps with Node.js & Koa, via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) or [egg-zrole](https://github.com/klren0312/egg-zrole)", + image: "/img/ecosystem/egg.jpeg", + }, + { + title: "[hapi](https://hapi.dev/)", + description: + "The Simple, Secure Framework Developers Trust. via plugin: [hapi-authz](https://github.com/node-casbin/hapi-authz)", + image: "/img/ecosystem/hapi.png", + }, + { + title: + "[Casbin JWT Express](https://github.com/tiagostutz/casbin-jwt-express)", + description: + "Authorization middleware that uses stateless JWT token to validate ACL rules using Casbin", + image: "/img/ecosystem/jwt.png", + }, +].map((item) => { + return { + ...item, + tags: ["NodeJS", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewarePhpData.js b/src/tableData/MiddlewareData/MiddlewarePhpData.js new file mode 100644 index 00000000..905ea90c --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewarePhpData.js @@ -0,0 +1,75 @@ +export const MiddlewarePhpData = [ + { + title: "[Laravel](https://laravel.com/)", + description: + "The PHP framework for web artisans, via plugin: [laravel-authz](https://github.com/php-casbin/laravel-authz)", + image: "/img/ecosystem/laravel.png", + }, + { + title: "[Yii PHP Framework](https://www.yiiframework.com/)", + description: + "A fast, secure, and efficient PHP framework, via plugin: [yii-permission](https://github.com/php-casbin/yii-permission) or [yii-casbin](https://github.com/php-casbin/yii-casbin)", + image: "/img/ecosystem/yii.png", + }, + { + title: "[CakePHP](https://cakephp.org/)", + description: + "Build fast, grow solid PHP Framework, via plugin: [cake-permission](https://github.com/php-casbin/cake-permission)", + image: "/img/ecosystem/cake.png", + }, + { + title: "[CodeIgniter](https://codeigniter.com/)", + description: + "Associate users with roles and permissions in CodeIgniter4 Web Framework, via plugin: [CodeIgniter Permission](https://github.com/php-casbin/codeigniter-permission)", + image: "/img/ecosystem/codeIgniter.png", + }, + { + title: "[ThinkPHP 5.1](https://www.thinkphp.cn/)", + description: + "The ThinkPHP 5.1 framework, via plugin: [think-casbin](https://github.com/php-casbin/think-casbin)", + image: "/img/ecosystem/thinkPHP.png", + }, + { + title: "[ThinkPHP 6.0](https://www.thinkphp.cn/)", + description: + "The ThinkPHP 6.0 framework, via plugin: [think-authz](https://github.com/php-casbin/think-authz)", + image: "/img/ecosystem/thinkPHP.png", + }, + { + title: "[Symfony](https://symfony.com/)", + description: + "The Symfony PHP framework, via plugin: [symfony-permission](https://github.com/php-casbin/symfony-permission) or [symfony-casbin](https://github.com/videni/symfony-casbin)", + image: "/img/ecosystem/symfony.png", + }, + { + title: "[Hyperf](https://github.com/hyperf/hyperf)", + description: + "A coroutine framework that focuses on hyperspeed and flexibility, via plugin: [hyperf-permission](https://github.com/php-casbin/hyperf-permission) or [donjan-deng/hyperf-casbin](https://github.com/donjan-deng/hyperf-casbin) or [cblink/hyperf-casbin](https://github.com/cblink/hyperf-casbin)", + }, + { + title: "[EasySwoole](https://www.easyswoole.com/)", + description: + "A distributed, persistent memory PHP framework based on the Swoole extension, via plugin: [easyswoole-permission](https://github.com/php-casbin/easyswoole-permission) or [easyswoole-hyperfOrm-permission](https://github.com/ice-leng/easyswoole-hyperfOrm-permission)", + }, + { + title: "[Slim](https://www.slimframework.com/)", + description: + "A PHP micro framework that helps you quickly write simple yet powerful web applications and APIs, via plugin: [casbin-with-slim](https://github.com/php-casbin/casbin-with-slim)", + }, + { + title: "[Phalcon](https://phalcon.io/)", + description: + "A full-stack PHP framework delivered as a C-extension, via plugin: [phalcon-permission](https://github.com/php-casbin/phalcon-permission)", + image: "/img/ecosystem/phalcon.png", + }, + { + title: "[Webman](https://github.com/walkor/webman)", + description: + "High performance HTTP Service Framework for PHP based on Workerman, via plugin: [webman-permission](https://github.com/php-casbin/webman-permission) or [webman-casbin](https://github.com/sunsgneayo/webman-casbin)", + }, +].map((item) => { + return { + ...item, + tags: ["PHP", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewarePythonData.js b/src/tableData/MiddlewareData/MiddlewarePythonData.js new file mode 100644 index 00000000..05842390 --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewarePythonData.js @@ -0,0 +1,31 @@ +export const MiddlewarePythonData = [ + { + title: "[Django](https://www.djangoproject.com/)", + description: + "A high-level Python Web framework, via plugin: [django-casbin](https://github.com/pycasbin/django-casbin) or [django-authorization](https://github.com/pycasbin/django-authorization)", + image: "/img/ecosystem/django.png", + }, + { + title: "[Flask](http://flask.pocoo.org/)", + description: + "A microframework for Python based on Werkzeug, Jinja 2 and good intentions, via plugin: [flask-authz](https://github.com/pycasbin/flask-authz) or [Flask-Casbin (3rd-party, but maybe more friendly)](https://github.com/daymien/Flask-Casbin) or [rbac-flask](https://github.com/daobeng/rbac-flask/tree/flask-casbin)", + image: "/img/ecosystem/flask.png", + }, + { + title: "[FastAPI](https://github.com/tiangolo/fastapi)", + description: + "A modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints, via plugin: [fastapi-authz](https://github.com/pycasbin/fastapi-authz) or [Fastapi-app](https://github.com/lqmanh/fastapi-app)", + image: "/img/ecosystem/fastapi.png", + }, + { + title: "[OpenStack](https://www.openstack.org/)", + description: + "The most widely deployed open source cloud software in the world, via plugin: [openstack-patron](https://github.com/casbin/openstack-patron)", + image: "/img/ecosystem/openstack.png", + }, +].map((item) => { + return { + ...item, + tags: ["Python", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewareRustData.js b/src/tableData/MiddlewareData/MiddlewareRustData.js new file mode 100644 index 00000000..8b2e06cd --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareRustData.js @@ -0,0 +1,36 @@ +export const MiddlewareRustData = [ + { + title: "[Actix](https://github.com/actix/actix)", + description: + "A Rust actors framework, via plugin: [actix-casbin](https://github.com/casbin-rs/actix-casbin)", + image: "/img/ecosystem/actix.png", + }, + { + title: "[Actix web](https://github.com/actix/actix-web)", + description: + "A small, pragmatic, and extremely fast rust web framework, via plugin: [actix-casbin-auth](https://github.com/casbin-rs/actix-casbin-auth)", + image: "/img/ecosystem/actix.png", + }, + { + title: "[Rocket](https://github.com/SergioBenitez/Rocket)", + description: + "a web framework for Rust that makes it simple to write fast, secure web applications without sacrificing flexibility, usability, or type safety, via plugin: [rocket-authz](https://github.com/casbin-rs/rocket-authz) or [rocket-casbin-auth](https://github.com/0xethsign/rocket-casbin-auth-app)", + image: "/img/ecosystem/rocket.jpeg", + }, + { + title: "[Axum web](https://github.com/tokio-rs/axum)", + description: + "A ergonomic and modular rust web framework, via plugin: [axum-casbin-auth](https://github.com/casbin-rs/axum-casbin-auth)", + }, + { + title: "[Poem web](https://github.com/poem-web/poem)", + description: + "A full-featured and easy to use web framework with the Rust programming language, via plugin: [poem-casbin](https://github.com/casbin-rs/poem-casbin)", + image: "/img/ecosystem/poem.jpeg", + }, +].map((item) => { + return { + ...item, + tags: ["Rust", "Middleware"], + }; +}); diff --git a/src/tableData/MiddlewareData/MiddlewareSwiftData.js b/src/tableData/MiddlewareData/MiddlewareSwiftData.js new file mode 100644 index 00000000..69346039 --- /dev/null +++ b/src/tableData/MiddlewareData/MiddlewareSwiftData.js @@ -0,0 +1,13 @@ +export const MiddlewareSwiftData = [ + { + title: "[Vapor](https://github.com/vapor/vapor)", + description: + "A server-side Swift web framework, via plugin: [vapor-authz](https://github.com/SwiftCasbin/vapor-authz)", + image: "/img/ecosystem/vapor.png", + }, +].map((item) => { + return { + ...item, + tags: ["Swift", "Middleware"], + }; +}); diff --git a/src/tableData/RoleManagerData/RoleManagerData.js b/src/tableData/RoleManagerData/RoleManagerData.js new file mode 100644 index 00000000..2694df71 --- /dev/null +++ b/src/tableData/RoleManagerData/RoleManagerData.js @@ -0,0 +1,13 @@ +import {RoleManagerGoData} from "@site/src/tableData/RoleManagerData/RoleManagerGoData"; +import {RoleManagerJavaData} from "@site/src/tableData/RoleManagerData/RoleManagerJavaData"; +import {RoleManagerNodejsData} from "@site/src/tableData/RoleManagerData/RoleManagerNodejsData"; +import {RoleManagerPhpData} from "@site/src/tableData/RoleManagerData/RoleManagerPhpData"; +import {RoleManagerPythonData} from "@site/src/tableData/RoleManagerData/RoleManagerPythonData"; + +export const RoleManagerData = [ + ...RoleManagerGoData, + ...RoleManagerJavaData, + ...RoleManagerNodejsData, + ...RoleManagerPhpData, + ...RoleManagerPythonData, +]; diff --git a/src/tableData/RoleManagerData/RoleManagerGoData.js b/src/tableData/RoleManagerData/RoleManagerGoData.js new file mode 100644 index 00000000..08496485 --- /dev/null +++ b/src/tableData/RoleManagerData/RoleManagerGoData.js @@ -0,0 +1,36 @@ +export const RoleManagerGoData = [ + { + title: + "[Default Role Manager (built-in)](https://github.com/casbin/casbin/blob/master/rbac/default-role-manager/role_manager.go)", + author: "Casbin", + description: "Supports role hierarchy stored in the Casbin policy", + }, + { + title: + "[Session Role Manager](https://github.com/casbin/session-role-manager)", + author: "[EDOMO Systems](https://github.com/edomosystems)", + description: + "Supports role hierarchy stored in the Casbin policy, with time-range-based sessions", + image: "/img/ecosystem/session.png", + + }, + { + title: "[Okta Role Manager](https://github.com/casbin/okta-role-manager)", + author: "Casbin", + description: + "Supports role hierarchy stored in [Okta](https://www.okta.com/)", + image: "/img/ecosystem/okta.png", + }, + { + title: "[Auth0 Role Manager](https://github.com/casbin/auth0-role-manager)", + author: "Casbin", + description: + "Supports role hierarchy stored in [Auth0](https://auth0.com/)'s [Authorization Extension](https://auth0.com/docs/extensions/authorization-extension/v2)", + image: "/img/ecosystem/auth0.png", + }, +].map((item) => { + return { + ...item, + tags: ["Go", "RoleManager"], + }; +}); diff --git a/src/tableData/RoleManagerData/RoleManagerJavaData.js b/src/tableData/RoleManagerData/RoleManagerJavaData.js new file mode 100644 index 00000000..075fc815 --- /dev/null +++ b/src/tableData/RoleManagerData/RoleManagerJavaData.js @@ -0,0 +1,13 @@ +export const RoleManagerJavaData = [ + { + title: + "[Default Role Manager (built-in)](https://github.com/casbin/jcasbin/blob/master/src/main/java/org/casbin/jcasbin/rbac/DefaultRoleManager.java)", + author: "Casbin", + description: "Supports role hierarchy stored in the Casbin policy", + }, +].map((item) => { + return { + ...item, + tags: ["Java", "RoleManager"], + }; +}); diff --git a/src/tableData/RoleManagerData/RoleManagerMDTable.jsx b/src/tableData/RoleManagerData/RoleManagerMDTable.jsx new file mode 100644 index 00000000..68d76e75 --- /dev/null +++ b/src/tableData/RoleManagerData/RoleManagerMDTable.jsx @@ -0,0 +1,15 @@ +import React from "react"; +import CustomMarkdown from "@site/src/components/MarkdownToJsx/CustomMarkdown"; + +export default function RoleManagerMDTable({data}) { + // 表头 + let markdown = + "| Role manager | Author | Description |\n|---------|--------|---------|\n"; + + // 遍历数据,为每一行添加Markdown格式 + data.forEach((item) => { + markdown += `| ${item.title} | ${item.author} | ${item.description} |\n`; + }); + + return {markdown}; +} diff --git a/src/tableData/RoleManagerData/RoleManagerNodejsData.js b/src/tableData/RoleManagerData/RoleManagerNodejsData.js new file mode 100644 index 00000000..35c2b82c --- /dev/null +++ b/src/tableData/RoleManagerData/RoleManagerNodejsData.js @@ -0,0 +1,21 @@ +export const RoleManagerNodejsData = [ + { + title: + "[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts)", + author: "Casbin", + description: "Supports role hierarchy stored in the Casbin policy", + }, + { + title: + "[Session Role Manager](https://github.com/node-casbin/session-role-manager)", + author: "Casbin", + description: + "Supports role hierarchy stored in the Casbin policy, with time-range-based sessions", + image: "/img/ecosystem/session.png", + }, +].map((item) => { + return { + ...item, + tags: ["NodeJS", "RoleManager"], + }; +}); diff --git a/src/tableData/RoleManagerData/RoleManagerPhpData.js b/src/tableData/RoleManagerData/RoleManagerPhpData.js new file mode 100644 index 00000000..557cde3c --- /dev/null +++ b/src/tableData/RoleManagerData/RoleManagerPhpData.js @@ -0,0 +1,13 @@ +export const RoleManagerPhpData = [ + { + title: + "[Default Role Manager (built-in)](https://github.com/php-casbin/php-casbin/blob/master/src/Rbac/DefaultRoleManager/RoleManager.php)", + author: "Casbin", + description: "Supports role hierarchy stored in the Casbin policy", + }, +].map((item) => { + return { + ...item, + tags: ["PHP", "RoleManager"], + }; +}); diff --git a/src/tableData/RoleManagerData/RoleManagerPythonData.js b/src/tableData/RoleManagerData/RoleManagerPythonData.js new file mode 100644 index 00000000..ce9299e8 --- /dev/null +++ b/src/tableData/RoleManagerData/RoleManagerPythonData.js @@ -0,0 +1,13 @@ +export const RoleManagerPythonData = [ + { + title: + "[Default Role Manager (built-in)](https://github.com/casbin/pycasbin/blob/master/casbin/rbac/default_role_manager/role_manager.py)", + author: "Casbin", + description: "Supports role hierarchy stored in the Casbin policy", + }, +].map((item) => { + return { + ...item, + tags: ["Python", "RoleManager"], + }; +}); diff --git a/src/tableData/WatcherData/WatcherData.js b/src/tableData/WatcherData/WatcherData.js new file mode 100644 index 00000000..649481ec --- /dev/null +++ b/src/tableData/WatcherData/WatcherData.js @@ -0,0 +1,17 @@ +import {WatcherGoData} from "@site/src/tableData/WatcherData/WatcherGoData"; +import {WatcherJavaData} from "@site/src/tableData/WatcherData/WatcherJavaData"; +import {WatcherNodejsData} from "@site/src/tableData/WatcherData/WatcherNodejsData"; +import {WatcherPythonData} from "@site/src/tableData/WatcherData/WatcherPythonData"; +import {WatcherDotNETData} from "@site/src/tableData/WatcherData/WatcherDotNETData"; +import {WatcherRubyData} from "@site/src/tableData/WatcherData/WatcherRubyData"; +import {WatcherPhpData} from "@site/src/tableData/WatcherData/WatcherPhpData"; + +export const WatcherData = [ + ...WatcherGoData, + ...WatcherJavaData, + ...WatcherNodejsData, + ...WatcherPythonData, + ...WatcherDotNETData, + ...WatcherRubyData, + ...WatcherPhpData, +]; diff --git a/src/tableData/WatcherData/WatcherDotNETData.js b/src/tableData/WatcherData/WatcherDotNETData.js new file mode 100644 index 00000000..ecbf20ea --- /dev/null +++ b/src/tableData/WatcherData/WatcherDotNETData.js @@ -0,0 +1,14 @@ +export const WatcherDotNETData = [ + { + title: "[Redis Watcher](https://github.com/Sbou/Casbin.NET-Redis-Watcher)", + type: "KV store", + author: "[@Sbou](https://github.com/Sbou)", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, +].map((item) => { + return { + ...item, + tags: ["dotNET", "Watcher"], + }; +}); diff --git a/src/tableData/WatcherData/WatcherGoData.js b/src/tableData/WatcherData/WatcherGoData.js new file mode 100644 index 00000000..be2ee04c --- /dev/null +++ b/src/tableData/WatcherData/WatcherGoData.js @@ -0,0 +1,89 @@ +export const WatcherGoData = [ + { + title: + "[PostgreSQL WatcherEx](https://github.com/IguteChung/casbin-psql-watcher)", + type: "Database", + author: "[@IguteChung](https://github.com/IguteChung)", + description: "WatcherEx for [PostgreSQL](https://www.postgresql.org/)", + image: "/img/ecosystem/postgreSQL.png", + }, + { + title: "[Redis WatcherEx](https://github.com/casbin/redis-watcher)", + type: "KV store", + author: "Casbin", + description: "WatcherEx for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: + "[Redis Watcher](https://github.com/billcobbler/casbin-redis-watcher)", + type: "KV store", + author: "[@billcobbler](https://github.com/billcobbler)", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: "[Etcd Watcher](https://github.com/casbin/etcd-watcher)", + type: "KV store", + author: "Casbin", + description: "Watcher for [etcd](https://github.com/coreos/etcd)", + image: "/img/ecosystem/etcd.png", + }, + { + title: "[TiKV Watcher](https://github.com/casbin/tikv-watcher)", + type: "KV store", + author: "Casbin", + description: "Watcher for [TiKV](https://github.com/tikv/tikv)", + image: "/img/ecosystem/tikv.png", + }, + { + title: "[Kafka Watcher](https://github.com/wgarunap/casbin-kafka-watcher)", + type: "Messaging system", + author: "[@wgarunap](https://github.com/wgarunap)", + description: "Watcher for [Apache Kafka](https://kafka.apache.org/)", + image: "/img/ecosystem/kafka.png", + }, + { + title: "[NATS Watcher](https://github.com/Soluto/casbin-nats-watcher)", + type: "Messaging system", + author: "[Soluto](https://github.com/Soluto)", + description: "Watcher for [NATS](https://nats.io/)", + }, + { + title: "[ZooKeeper Watcher](https://github.com/grepsr/casbin-zk-watcher)", + type: "Messaging system", + author: "[Grepsr](https://github.com/grepsr)", + description: + "Watcher for [Apache ZooKeeper](https://zookeeper.apache.org/)", + image: "/img/ecosystem/zookeeper.png", + }, + { + title: + "[NATS, RabbitMQ, GCP Pub/Sub, AWS SNS & SQS, Kafka, InMemory](https://github.com/rusenask/casbin-go-cloud-watcher)", + type: "Messaging System", + author: "[@rusenask](https://github.com/rusenask/)", + description: + "Watcher based on [Go Cloud Dev Kit](https://gocloud.dev/) that works with leading cloud providers and self-hosted infrastructure", + }, + { + title: + "[NATS, RabbitMQ, GCP Pub/Sub, AWS SNS & SQS, Kafka, InMemory](https://github.com/bartventer/casbin-go-cloud-watcher)", + type: "Messaging System", + author: "[@bartventer](https://github.com/bartventer/)", + description: + "WatcherEx based on [Go Cloud Dev Kit](https://gocloud.dev/) that works with leading cloud providers and self-hosted infrastructure", + }, + { + title: + "[RocketMQ Watcher](https://github.com/fmyxyz/casbin-rocketmq-watcher)", + type: "Messaging system", + author: "[@fmyxyz](https://github.com/fmyxyz)", + description: "Watcher for [Apache RocketMQ](https://rocketmq.apache.org/)", + image: "/img/ecosystem/rocketMQ.png", + }, +].map((item) => { + return { + ...item, + tags: ["Go", "Watcher"], + }; +}); diff --git a/src/tableData/WatcherData/WatcherJavaData.js b/src/tableData/WatcherData/WatcherJavaData.js new file mode 100644 index 00000000..45bc851b --- /dev/null +++ b/src/tableData/WatcherData/WatcherJavaData.js @@ -0,0 +1,37 @@ +export const WatcherJavaData = [ + { + title: "[Etcd Adapter](https://github.com/mapleafgo/jcasbin-extra)", + type: "KV store", + author: "[@mapleafgo](https://github.com/mapleafgo)", + description: "Watcher for [etcd](https://github.com/coreos/etcd)", + image: "/img/ecosystem/etcd.png", + }, + { + title: "[Redis Watcher](https://github.com/jcasbin/redis-watcher)", + type: "KV store", + author: "Casbin", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: + "[Lettuce-Based Redis Watcher](https://github.com/jcasbin/lettuce-redis-watcher)", + type: "KV store", + author: "Casbin", + description: + "Watcher for [Redis](http://redis.io/) based on [Lettuce](https://lettuce.io/))", + image: "/img/ecosystem/lettuce.png", + }, + { + title: "[Kafka Watcher](https://github.com/jcasbin/kafka-watcher)", + type: "Messaging system", + author: "Casbin", + description: "Watcher for [Apache Kafka](https://kafka.apache.org/)", + image: "/img/ecosystem/kafka.png", + }, +].map((item) => { + return { + ...item, + tags: ["Java", "Watcher"], + }; +}); diff --git a/src/tableData/WatcherData/WatcherMDTable.jsx b/src/tableData/WatcherData/WatcherMDTable.jsx new file mode 100644 index 00000000..0d1d256f --- /dev/null +++ b/src/tableData/WatcherData/WatcherMDTable.jsx @@ -0,0 +1,15 @@ +import React from "react"; +import CustomMarkdown from "@site/src/components/MarkdownToJsx/CustomMarkdown"; + +export default function WatcherMDTable({data}) { + // 表头 + let markdown = + "| Watcher | Type | Author | Description |\n|---------|------|--------|-------------|\n"; + + // 遍历数据,为每一行添加Markdown格式 + data.forEach((item) => { + markdown += `| ${item.title} | ${item.type} | ${item.author} | ${item.description} |\n`; + }); + + return {markdown}; +} diff --git a/src/tableData/WatcherData/WatcherNodejsData.js b/src/tableData/WatcherData/WatcherNodejsData.js new file mode 100644 index 00000000..9c204596 --- /dev/null +++ b/src/tableData/WatcherData/WatcherNodejsData.js @@ -0,0 +1,45 @@ +export const WatcherNodejsData = [ + { + title: "[Etcd Watcher](https://github.com/node-casbin/etcd-watcher)", + type: "KV store", + author: "Casbin", + description: "Watcher for [etcd](https://github.com/coreos/etcd)", + image: "/img/ecosystem/etcd.png", + }, + { + title: "[Redis Watcher](https://github.com/node-casbin/redis-watcher)", + type: "KV store", + author: "Casbin", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: "[Pub/Sub Watcher](https://github.com/node-casbin/pubsub-watcher)", + type: "Messaging system", + author: "Casbin", + description: + "Watcher for [Google Cloud Pub/Sub](https://cloud.google.com/pubsub/docs)", + image: "/img/ecosystem/pubsub.png", + }, + { + title: + "[MongoDB Change Streams Watcher](https://github.com/node-casbin/mongo-changestream-watcher)", + type: "Database", + author: "Casbin", + description: + "Watcher for [MongoDB Change Streams](https://www.mongodb.com/docs/manual/changeStreams/)", + image: "/img/ecosystem/monogoDB.png", + }, + { + title: "[Postgres Watcher](https://github.com/mcollina/casbin-pg-watcher)", + type: "Database", + author: "[@mcollina](https://github.com/mcollina)", + description: "Watcher for [PostgreSQL](https://www.postgresql.org/)", + image: "/img/ecosystem/postgreSQL.png", + }, +].map((item) => { + return { + ...item, + tags: ["NodeJS", "Watcher"], + }; +}); diff --git a/src/tableData/WatcherData/WatcherPhpData.js b/src/tableData/WatcherData/WatcherPhpData.js new file mode 100644 index 00000000..beabdcfd --- /dev/null +++ b/src/tableData/WatcherData/WatcherPhpData.js @@ -0,0 +1,14 @@ +export const WatcherPhpData = [ + { + title: "[Redis Watcher](https://github.com/php-casbin/webman-permission)", + type: "KV store", + author: "[@Tinywan](https://github.com/Tinywan)", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, +].map((item) => { + return { + ...item, + tags: ["PHP", "Watcher"], + }; +}); diff --git a/src/tableData/WatcherData/WatcherPythonData.js b/src/tableData/WatcherData/WatcherPythonData.js new file mode 100644 index 00000000..c05ce312 --- /dev/null +++ b/src/tableData/WatcherData/WatcherPythonData.js @@ -0,0 +1,52 @@ +export const WatcherPythonData = [ + { + title: "[Etcd Watcher](https://github.com/pycasbin/etcd-watcher)", + type: "KV store", + author: "Casbin", + description: "Watcher for [etcd](https://github.com/coreos/etcd)", + image: "/img/ecosystem/etcd.png", + }, + { + title: "[Redis Watcher](https://github.com/pycasbin/redis-watcher)", + type: "KV store", + author: "Casbin", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: + "[Redis Watcher](https://github.com/ScienceLogic/flask-casbin-redis-watcher)", + type: "KV store", + author: "[ScienceLogic](https://github.com/ScienceLogic)", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: + "[Redis Async Watcher](https://github.com/kevinkelin/casbin_async_redis_watcher)", + type: "KV store", + author: "[@kevinkelin](https://github.com/kevinkelin)", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: + "[PostgreSQL Watcher](https://github.com/pycasbin/postgresql-watcher)", + type: "Database", + author: "Casbin", + description: "Watcher for [PostgreSQL](https://www.postgresql.org/)", + image: "/img/ecosystem/redis.png", + }, + { + title: "[RabbitMQ Watcher](https://github.com/pycasbin/rabbitmq-watcher)", + type: "Messaging system", + author: "Casbin", + description: "Watcher for [RabbitMQ](https://www.rabbitmq.com/)", + image: "/img/ecosystem/rabbitMQ.png", + }, +].map((item) => { + return { + ...item, + tags: ["Python", "Watcher"], + }; +}); diff --git a/src/tableData/WatcherData/WatcherRubyData.js b/src/tableData/WatcherData/WatcherRubyData.js new file mode 100644 index 00000000..ff93ce03 --- /dev/null +++ b/src/tableData/WatcherData/WatcherRubyData.js @@ -0,0 +1,23 @@ +export const WatcherRubyData = [ + { + title: + "[Redis Watcher](https://github.com/CasbinRuby/casbin-ruby-redis-watcher)", + type: "KV store", + author: "[CasbinRuby](https://github.com/CasbinRuby)", + description: "Watcher for [Redis](http://redis.io/)", + image: "/img/ecosystem/redis.png", + }, + { + title: + "[RabbitMQ Watcher](https://github.com/CasbinRuby/casbin-ruby-rabbitmq-watcher)", + type: "Messaging system", + author: "[CasbinRuby](https://github.com/CasbinRuby)", + description: "Watcher for [RabbitMQ](https://www.rabbitmq.com/)", + image: "/img/ecosystem/rabbitMQ.png", + }, +].map((item) => { + return { + ...item, + tags: ["Ruby", "Watcher"], + }; +}); diff --git a/src/tableData/tableData.jsx b/src/tableData/tableData.jsx new file mode 100644 index 00000000..b7e7cb0c --- /dev/null +++ b/src/tableData/tableData.jsx @@ -0,0 +1,33 @@ +import {MiddlewareData} from "@site/src/tableData/MiddlewareData/MiddlewareData"; +import {DispatcherData} from "@site/src/tableData/DispatcherData/DispatcherData"; +import {AdapterData} from "@site/src/tableData/AdapterData/AdapterData"; +import {RoleManagerData} from "@site/src/tableData/RoleManagerData/RoleManagerData"; +import {WatcherData} from "@site/src/tableData/WatcherData/WatcherData"; + +const adapterData = [ + ...AdapterData, + ...DispatcherData, + ...MiddlewareData, + ...RoleManagerData, + ...WatcherData, +]; + +function sortList() { + let result = adapterData; + // Sort by site name + result = sortBy(result, (item) => item.title.toLowerCase()); + // Sort by favorite tag, favorites first + result = sortBy(result, (item) => !item.tags.includes("favorite")); + return result; +} + +export const sortedList = sortList(); + +export function sortBy(array, getter) { + const sortedArray = [...array]; + sortedArray.sort((a, b) => + // eslint-disable-next-line no-nested-ternary + getter(a) > getter(b) ? 1 : getter(b) > getter(a) ? -1 : 0 + ); + return sortedArray; +} diff --git a/src/tableData/tags.jsx b/src/tableData/tags.jsx new file mode 100644 index 00000000..ce2f80da --- /dev/null +++ b/src/tableData/tags.jsx @@ -0,0 +1,144 @@ +import {translate} from "@docusaurus/Translate"; + +export const Tags = { + Go: { + label: translate({message: "Go"}), + description: translate({ + message: "go language", + id: "showcase.tag.favorite.description", + }), + color: "#00ADD8", + }, + Java: { + label: translate({message: "Java"}), + description: translate({ + message: + "Java language", + id: "showcase.tag.favorite.description", + }), + color: "#007396", + }, + NodeJS: { + label: translate({message: "NodeJS"}), + description: translate({ + message: "NodeJS runtime", + id: "showcase.tag.favorite.description", + }), + color: "#339933", + }, + PHP: { + label: translate({message: "PHP"}), + description: translate({ + message: + "PHP language", + id: "showcase.tag.favorite.description", + }), + color: "#777BB4", + }, + Python: { + label: translate({message: "Python"}), + description: translate({ + message: + "Python Language", + id: "showcase.tag.favorite.description", + }), + color: "#3776AB", + }, + dotNET: { + label: translate({message: "dotNET"}), + description: translate({ + message: + ".NET runtime", + id: "showcase.tag.favorite.description", + }), + color: "#512BD4", + }, + Rust: { + label: translate({message: "Rust"}), + description: translate({ + message: + "Rust language", + id: "showcase.tag.favorite.description", + }), + color: "#000000", + }, + Lua: { + label: translate({message: "Lua"}), + description: translate({ + message: + "Lua language", + id: "showcase.tag.favorite.description", + }), + color: "#000080", + }, + Swift: { + label: translate({message: "Swift"}), + description: translate({ + message: + "Swift language", + id: "showcase.tag.favorite.description", + }), + color: "#FA7343", + }, + Ruby: { + label: translate({message: "Ruby"}), + description: translate({ + message: + "Ruby language", + id: "showcase.tag.favorite.description", + }), + color: "#CC342D", + }, + Cpp: { + label: translate({message: "Cpp"}), + description: translate({ + message: + "Cpp language", + id: "showcase.tag.favorite.description", + }), + color: "#00599C", + }, + Adapter: { + label: translate({message: "adapter"}), + description: translate({ + message: "Adapter", + id: "showcase.tag.opensource.description", + }), + color: "#FFC107", + }, + Dispatcher: { + label: translate({message: "dispatcher"}), + description: translate({ + message: "dispatcher", + id: "showcase.tag.opensource.description", + }), + color: "#FF9800", + }, + Middleware: { + label: translate({message: "middleware"}), + description: translate({ + message: "Middleware", + id: "showcase.tag.opensource.description", + }), + color: "#9C27B0", + }, + RoleManager: { + label: translate({message: "RoleManager"}), + description: translate({ + message: "RoleManager", + id: "showcase.tag.opensource.description", + }), + color: "#3F51B5", + }, + Watcher: { + label: translate({message: "watcher"}), + description: translate({ + message: "watcher", + id: "showcase.tag.opensource.description", + }), + color: "#8BC34A", + }, + +}; + +export const TagList = Object.keys(Tags); diff --git a/static/img/ecosystem/DB.png b/static/img/ecosystem/DB.png new file mode 100644 index 00000000..1df7f87f Binary files /dev/null and b/static/img/ecosystem/DB.png differ diff --git a/static/img/ecosystem/DBAL.png b/static/img/ecosystem/DBAL.png new file mode 100644 index 00000000..de3fa957 Binary files /dev/null and b/static/img/ecosystem/DBAL.png differ diff --git a/static/img/ecosystem/JDBC.png b/static/img/ecosystem/JDBC.png new file mode 100644 index 00000000..93bade7d Binary files /dev/null and b/static/img/ecosystem/JDBC.png differ diff --git a/static/img/ecosystem/SQL.png b/static/img/ecosystem/SQL.png new file mode 100644 index 00000000..b8cd05e8 Binary files /dev/null and b/static/img/ecosystem/SQL.png differ diff --git a/static/img/ecosystem/actix.png b/static/img/ecosystem/actix.png new file mode 100644 index 00000000..c5079440 Binary files /dev/null and b/static/img/ecosystem/actix.png differ diff --git a/static/img/ecosystem/amazonS3.png b/static/img/ecosystem/amazonS3.png new file mode 100644 index 00000000..41a6d278 Binary files /dev/null and b/static/img/ecosystem/amazonS3.png differ diff --git a/static/img/ecosystem/apisix.png b/static/img/ecosystem/apisix.png new file mode 100644 index 00000000..6b582d47 Binary files /dev/null and b/static/img/ecosystem/apisix.png differ diff --git a/static/img/ecosystem/arangoDB.png b/static/img/ecosystem/arangoDB.png new file mode 100644 index 00000000..3a8f8027 Binary files /dev/null and b/static/img/ecosystem/arangoDB.png differ diff --git a/static/img/ecosystem/asp.jpeg b/static/img/ecosystem/asp.jpeg new file mode 100644 index 00000000..8a33b8fc Binary files /dev/null and b/static/img/ecosystem/asp.jpeg differ diff --git a/static/img/ecosystem/auth0.png b/static/img/ecosystem/auth0.png new file mode 100644 index 00000000..587737c5 Binary files /dev/null and b/static/img/ecosystem/auth0.png differ diff --git a/static/img/ecosystem/badger.png b/static/img/ecosystem/badger.png new file mode 100644 index 00000000..e3478ac0 Binary files /dev/null and b/static/img/ecosystem/badger.png differ diff --git a/static/img/ecosystem/beego.png b/static/img/ecosystem/beego.png new file mode 100644 index 00000000..ab43d5c4 Binary files /dev/null and b/static/img/ecosystem/beego.png differ diff --git a/static/img/ecosystem/bolt.png b/static/img/ecosystem/bolt.png new file mode 100644 index 00000000..39a4f6e0 Binary files /dev/null and b/static/img/ecosystem/bolt.png differ diff --git a/static/img/ecosystem/buffalo.jpeg b/static/img/ecosystem/buffalo.jpeg new file mode 100644 index 00000000..0d8edf24 Binary files /dev/null and b/static/img/ecosystem/buffalo.jpeg differ diff --git a/static/img/ecosystem/caddy.jpeg b/static/img/ecosystem/caddy.jpeg new file mode 100644 index 00000000..17fa1b78 Binary files /dev/null and b/static/img/ecosystem/caddy.jpeg differ diff --git a/static/img/ecosystem/cake.png b/static/img/ecosystem/cake.png new file mode 100644 index 00000000..374e9550 Binary files /dev/null and b/static/img/ecosystem/cake.png differ diff --git a/static/img/ecosystem/cassandra.png b/static/img/ecosystem/cassandra.png new file mode 100644 index 00000000..75ee7082 Binary files /dev/null and b/static/img/ecosystem/cassandra.png differ diff --git a/static/img/ecosystem/chi.png b/static/img/ecosystem/chi.png new file mode 100644 index 00000000..46db9dc0 Binary files /dev/null and b/static/img/ecosystem/chi.png differ diff --git a/static/img/ecosystem/codeIgniter.png b/static/img/ecosystem/codeIgniter.png new file mode 100644 index 00000000..19a9a856 Binary files /dev/null and b/static/img/ecosystem/codeIgniter.png differ diff --git a/static/img/ecosystem/cosmosDB.png b/static/img/ecosystem/cosmosDB.png new file mode 100644 index 00000000..0e6c3995 Binary files /dev/null and b/static/img/ecosystem/cosmosDB.png differ diff --git a/static/img/ecosystem/couchBase.png b/static/img/ecosystem/couchBase.png new file mode 100644 index 00000000..b978ec6d Binary files /dev/null and b/static/img/ecosystem/couchBase.png differ diff --git a/static/img/ecosystem/django.png b/static/img/ecosystem/django.png new file mode 100644 index 00000000..8af9fbaa Binary files /dev/null and b/static/img/ecosystem/django.png differ diff --git a/static/img/ecosystem/dynamoDB.png b/static/img/ecosystem/dynamoDB.png new file mode 100644 index 00000000..86f6dd49 Binary files /dev/null and b/static/img/ecosystem/dynamoDB.png differ diff --git a/static/img/ecosystem/echo.png b/static/img/ecosystem/echo.png new file mode 100644 index 00000000..9c37b683 Binary files /dev/null and b/static/img/ecosystem/echo.png differ diff --git a/static/img/ecosystem/egg.jpeg b/static/img/ecosystem/egg.jpeg new file mode 100644 index 00000000..15ea7893 Binary files /dev/null and b/static/img/ecosystem/egg.jpeg differ diff --git a/static/img/ecosystem/etcd.png b/static/img/ecosystem/etcd.png new file mode 100644 index 00000000..80892bc9 Binary files /dev/null and b/static/img/ecosystem/etcd.png differ diff --git a/static/img/ecosystem/express.png b/static/img/ecosystem/express.png new file mode 100644 index 00000000..f453e23b Binary files /dev/null and b/static/img/ecosystem/express.png differ diff --git a/static/img/ecosystem/fastapi.png b/static/img/ecosystem/fastapi.png new file mode 100644 index 00000000..6c45892c Binary files /dev/null and b/static/img/ecosystem/fastapi.png differ diff --git a/static/img/ecosystem/fastify.png b/static/img/ecosystem/fastify.png new file mode 100644 index 00000000..7cb8bbb6 Binary files /dev/null and b/static/img/ecosystem/fastify.png differ diff --git a/static/img/ecosystem/fiber.png b/static/img/ecosystem/fiber.png new file mode 100644 index 00000000..4f06ec29 Binary files /dev/null and b/static/img/ecosystem/fiber.png differ diff --git a/static/img/ecosystem/file.png b/static/img/ecosystem/file.png new file mode 100644 index 00000000..1a89342e Binary files /dev/null and b/static/img/ecosystem/file.png differ diff --git a/static/img/ecosystem/firestore.jpeg b/static/img/ecosystem/firestore.jpeg new file mode 100644 index 00000000..e2e63ba4 Binary files /dev/null and b/static/img/ecosystem/firestore.jpeg differ diff --git a/static/img/ecosystem/flask.png b/static/img/ecosystem/flask.png new file mode 100644 index 00000000..6c53b3b5 Binary files /dev/null and b/static/img/ecosystem/flask.png differ diff --git a/static/img/ecosystem/gin.jpeg b/static/img/ecosystem/gin.jpeg new file mode 100644 index 00000000..199918d5 Binary files /dev/null and b/static/img/ecosystem/gin.jpeg differ diff --git a/static/img/ecosystem/goframe.png b/static/img/ecosystem/goframe.png new file mode 100644 index 00000000..989e784c Binary files /dev/null and b/static/img/ecosystem/goframe.png differ diff --git a/static/img/ecosystem/gokit.png b/static/img/ecosystem/gokit.png new file mode 100644 index 00000000..00bff101 Binary files /dev/null and b/static/img/ecosystem/gokit.png differ diff --git a/static/img/ecosystem/googleCloudStorage.png b/static/img/ecosystem/googleCloudStorage.png new file mode 100644 index 00000000..19e4ed65 Binary files /dev/null and b/static/img/ecosystem/googleCloudStorage.png differ diff --git a/static/img/ecosystem/hapi.png b/static/img/ecosystem/hapi.png new file mode 100644 index 00000000..a90aeff3 Binary files /dev/null and b/static/img/ecosystem/hapi.png differ diff --git a/static/img/ecosystem/hashicorp.png b/static/img/ecosystem/hashicorp.png new file mode 100644 index 00000000..b519a313 Binary files /dev/null and b/static/img/ecosystem/hashicorp.png differ diff --git a/static/img/ecosystem/hertz.png b/static/img/ecosystem/hertz.png new file mode 100644 index 00000000..ef58b4b0 Binary files /dev/null and b/static/img/ecosystem/hertz.png differ diff --git a/static/img/ecosystem/http.png b/static/img/ecosystem/http.png new file mode 100644 index 00000000..ec85cb30 Binary files /dev/null and b/static/img/ecosystem/http.png differ diff --git a/static/img/ecosystem/iris.png b/static/img/ecosystem/iris.png new file mode 100644 index 00000000..643e4668 Binary files /dev/null and b/static/img/ecosystem/iris.png differ diff --git a/static/img/ecosystem/json.png b/static/img/ecosystem/json.png new file mode 100644 index 00000000..82ec03c8 Binary files /dev/null and b/static/img/ecosystem/json.png differ diff --git a/static/img/ecosystem/jwt.png b/static/img/ecosystem/jwt.png new file mode 100644 index 00000000..90be7ee5 Binary files /dev/null and b/static/img/ecosystem/jwt.png differ diff --git a/static/img/ecosystem/kafka.png b/static/img/ecosystem/kafka.png new file mode 100644 index 00000000..915ca1f5 Binary files /dev/null and b/static/img/ecosystem/kafka.png differ diff --git a/static/img/ecosystem/koa.png b/static/img/ecosystem/koa.png new file mode 100644 index 00000000..eabd11fd Binary files /dev/null and b/static/img/ecosystem/koa.png differ diff --git a/static/img/ecosystem/kratos.png b/static/img/ecosystem/kratos.png new file mode 100644 index 00000000..662b347c Binary files /dev/null and b/static/img/ecosystem/kratos.png differ diff --git a/static/img/ecosystem/laravel.png b/static/img/ecosystem/laravel.png new file mode 100644 index 00000000..b81c4f4e Binary files /dev/null and b/static/img/ecosystem/laravel.png differ diff --git a/static/img/ecosystem/lettuce.png b/static/img/ecosystem/lettuce.png new file mode 100644 index 00000000..00392820 Binary files /dev/null and b/static/img/ecosystem/lettuce.png differ diff --git a/static/img/ecosystem/loopback.png b/static/img/ecosystem/loopback.png new file mode 100644 index 00000000..cf9cfdff Binary files /dev/null and b/static/img/ecosystem/loopback.png differ diff --git a/static/img/ecosystem/macaron.png b/static/img/ecosystem/macaron.png new file mode 100644 index 00000000..c574579a Binary files /dev/null and b/static/img/ecosystem/macaron.png differ diff --git a/static/img/ecosystem/memory.png b/static/img/ecosystem/memory.png new file mode 100644 index 00000000..d1cff25e Binary files /dev/null and b/static/img/ecosystem/memory.png differ diff --git a/static/img/ecosystem/monogoDB.png b/static/img/ecosystem/monogoDB.png new file mode 100644 index 00000000..68c50826 Binary files /dev/null and b/static/img/ecosystem/monogoDB.png differ diff --git a/static/img/ecosystem/monogoEngine.png b/static/img/ecosystem/monogoEngine.png new file mode 100644 index 00000000..1e0f34ca Binary files /dev/null and b/static/img/ecosystem/monogoEngine.png differ diff --git a/static/img/ecosystem/mybatis.jpeg b/static/img/ecosystem/mybatis.jpeg new file mode 100644 index 00000000..aead68dd Binary files /dev/null and b/static/img/ecosystem/mybatis.jpeg differ diff --git a/static/img/ecosystem/nest.png b/static/img/ecosystem/nest.png new file mode 100644 index 00000000..48f26ed1 Binary files /dev/null and b/static/img/ecosystem/nest.png differ diff --git a/static/img/ecosystem/nginx.png b/static/img/ecosystem/nginx.png new file mode 100644 index 00000000..acb1da99 Binary files /dev/null and b/static/img/ecosystem/nginx.png differ diff --git a/static/img/ecosystem/nuzt.png b/static/img/ecosystem/nuzt.png new file mode 100644 index 00000000..70b808d6 Binary files /dev/null and b/static/img/ecosystem/nuzt.png differ diff --git a/static/img/ecosystem/okta.png b/static/img/ecosystem/okta.png new file mode 100644 index 00000000..67f05483 Binary files /dev/null and b/static/img/ecosystem/okta.png differ diff --git a/static/img/ecosystem/openResty.png b/static/img/ecosystem/openResty.png new file mode 100644 index 00000000..388fd052 Binary files /dev/null and b/static/img/ecosystem/openResty.png differ diff --git a/static/img/ecosystem/openstack.png b/static/img/ecosystem/openstack.png new file mode 100644 index 00000000..ba2960b5 Binary files /dev/null and b/static/img/ecosystem/openstack.png differ diff --git a/static/img/ecosystem/phalcon.png b/static/img/ecosystem/phalcon.png new file mode 100644 index 00000000..3e279f7e Binary files /dev/null and b/static/img/ecosystem/phalcon.png differ diff --git a/static/img/ecosystem/poem.jpeg b/static/img/ecosystem/poem.jpeg new file mode 100644 index 00000000..0f15e1a7 Binary files /dev/null and b/static/img/ecosystem/poem.jpeg differ diff --git a/static/img/ecosystem/postgreSQL.png b/static/img/ecosystem/postgreSQL.png new file mode 100644 index 00000000..092e46da Binary files /dev/null and b/static/img/ecosystem/postgreSQL.png differ diff --git a/static/img/ecosystem/protobuf.png b/static/img/ecosystem/protobuf.png new file mode 100644 index 00000000..f451224d Binary files /dev/null and b/static/img/ecosystem/protobuf.png differ diff --git a/static/img/ecosystem/pubsub.png b/static/img/ecosystem/pubsub.png new file mode 100644 index 00000000..d98672d7 Binary files /dev/null and b/static/img/ecosystem/pubsub.png differ diff --git a/static/img/ecosystem/rabbitMQ.png b/static/img/ecosystem/rabbitMQ.png new file mode 100644 index 00000000..8d6db687 Binary files /dev/null and b/static/img/ecosystem/rabbitMQ.png differ diff --git a/static/img/ecosystem/redis.png b/static/img/ecosystem/redis.png new file mode 100644 index 00000000..151c9fb8 Binary files /dev/null and b/static/img/ecosystem/redis.png differ diff --git a/static/img/ecosystem/rethinkDB.png b/static/img/ecosystem/rethinkDB.png new file mode 100644 index 00000000..ee8cd96f Binary files /dev/null and b/static/img/ecosystem/rethinkDB.png differ diff --git a/static/img/ecosystem/revel.png b/static/img/ecosystem/revel.png new file mode 100644 index 00000000..5c662641 Binary files /dev/null and b/static/img/ecosystem/revel.png differ diff --git a/static/img/ecosystem/rocket.jpeg b/static/img/ecosystem/rocket.jpeg new file mode 100644 index 00000000..f35b5924 Binary files /dev/null and b/static/img/ecosystem/rocket.jpeg differ diff --git a/static/img/ecosystem/rocketMQ.png b/static/img/ecosystem/rocketMQ.png new file mode 100644 index 00000000..0ea7b5c3 Binary files /dev/null and b/static/img/ecosystem/rocketMQ.png differ diff --git a/static/img/ecosystem/rqlite.png b/static/img/ecosystem/rqlite.png new file mode 100644 index 00000000..99a1d26e Binary files /dev/null and b/static/img/ecosystem/rqlite.png differ diff --git a/static/img/ecosystem/session.png b/static/img/ecosystem/session.png new file mode 100644 index 00000000..e60383e2 Binary files /dev/null and b/static/img/ecosystem/session.png differ diff --git a/static/img/ecosystem/shiro.jpeg b/static/img/ecosystem/shiro.jpeg new file mode 100644 index 00000000..06f67bf1 Binary files /dev/null and b/static/img/ecosystem/shiro.jpeg differ diff --git a/static/img/ecosystem/spanner.png b/static/img/ecosystem/spanner.png new file mode 100644 index 00000000..c77a1d79 Binary files /dev/null and b/static/img/ecosystem/spanner.png differ diff --git a/static/img/ecosystem/springboot.png b/static/img/ecosystem/springboot.png new file mode 100644 index 00000000..f6e482f7 Binary files /dev/null and b/static/img/ecosystem/springboot.png differ diff --git a/static/img/ecosystem/string.png b/static/img/ecosystem/string.png new file mode 100644 index 00000000..b5a85d0f Binary files /dev/null and b/static/img/ecosystem/string.png differ diff --git a/static/img/ecosystem/symfony.png b/static/img/ecosystem/symfony.png new file mode 100644 index 00000000..726e8b2b Binary files /dev/null and b/static/img/ecosystem/symfony.png differ diff --git a/static/img/ecosystem/thinkPHP.png b/static/img/ecosystem/thinkPHP.png new file mode 100644 index 00000000..c14b7c2f Binary files /dev/null and b/static/img/ecosystem/thinkPHP.png differ diff --git a/static/img/ecosystem/tikv.png b/static/img/ecosystem/tikv.png new file mode 100644 index 00000000..9954253a Binary files /dev/null and b/static/img/ecosystem/tikv.png differ diff --git a/static/img/ecosystem/traefik.png b/static/img/ecosystem/traefik.png new file mode 100644 index 00000000..770aa165 Binary files /dev/null and b/static/img/ecosystem/traefik.png differ diff --git a/static/img/ecosystem/vapor.png b/static/img/ecosystem/vapor.png new file mode 100644 index 00000000..75eaccb6 Binary files /dev/null and b/static/img/ecosystem/vapor.png differ diff --git a/static/img/ecosystem/yaml.png b/static/img/ecosystem/yaml.png new file mode 100644 index 00000000..fc6ea5b2 Binary files /dev/null and b/static/img/ecosystem/yaml.png differ diff --git a/static/img/ecosystem/yii.png b/static/img/ecosystem/yii.png new file mode 100644 index 00000000..be1a1485 Binary files /dev/null and b/static/img/ecosystem/yii.png differ diff --git a/static/img/ecosystem/zookeeper.png b/static/img/ecosystem/zookeeper.png new file mode 100644 index 00000000..ee386e1a Binary files /dev/null and b/static/img/ecosystem/zookeeper.png differ diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..b643c821 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,9 @@ +const path = require("path"); + +module.exports = { + resolve: { + alias: { + "@site": path.resolve(__dirname, "./"), + }, + }, +}; diff --git a/yarn.lock b/yarn.lock index 9181a7b7..a877256f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1652,12 +1652,12 @@ dependencies: giscus "^1.2.4" -"@hapi/hoek@^9.0.0": +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== -"@hapi/topo@^5.0.0": +"@hapi/topo@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== @@ -1819,17 +1819,22 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@sideway/address@^4.1.3": +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@sideway/address@^4.1.4": version "4.1.4" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== dependencies: "@hapi/hoek" "^9.0.0" -"@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== "@sideway/pinpoint@^2.0.0": version "2.0.0" @@ -5370,14 +5375,14 @@ jest-worker@^27.4.5, jest-worker@^27.5.1: supports-color "^8.0.0" joi@^17.6.0: - version "17.6.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" - integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.0" + version "17.12.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.0.tgz#a3fb5715f198beb0471cd551dd26792089c308d5" + integrity sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw== + dependencies: + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.4" + "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: @@ -5755,6 +5760,11 @@ markdown-it@13.0.1: mdurl "^1.0.1" uc.micro "^1.0.5" +markdown-to-jsx@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.0.tgz#4606c5c549a6f6cb87604c35f5ee4f42959ffb6b" + integrity sha512-zilc+MIkVVXPyTb4iIUTIz9yyqfcWjszGXnwF9K/aiBWcHXFcmdEMTkG01/oQhwSCH7SY1BnG6+ev5BzWmbPrg== + markdownlint-cli@^0.35.0: version "0.35.0" resolved "https://registry.yarnpkg.com/markdownlint-cli/-/markdownlint-cli-0.35.0.tgz#1a6386777c6f20681e1425c0b7a056cf130bc46f" @@ -6874,6 +6884,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== +prettier@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.4.tgz#4723cadeac2ce7c9227de758e5ff9b14e075f283" + integrity sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -7086,6 +7101,11 @@ react-error-overlay@^6.0.11: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== +react-fast-compare@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== + react-fast-compare@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" @@ -7129,6 +7149,14 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" +react-popper@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" + integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== + dependencies: + react-fast-compare "^3.0.1" + warning "^4.0.2" + react-router-config@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" @@ -8756,6 +8784,13 @@ wait-on@^6.0.1: minimist "^1.2.5" rxjs "^7.5.4" +warning@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"