webman-permission
webman-permission copied to clipboard
🔒 An authorization library that supports access control models like ACL, RBAC, ABAC for webman plugin
Webman Authorization Plugin
An authorization library that supports access control models like ACL, RBAC, ABAC for webman plugin
å®è£
composer require -W casbin/webman-permission
使ç¨
ä¾èµæ³¨å ¥é ç½®
ä¿®æ¹é
ç½®config/container.phpï¼å
¶æç»å
容å¦ä¸ï¼
$builder = new \DI\ContainerBuilder();
$builder->addDefinitions(config('dependence', []));
$builder->useAutowiring(true);
return $builder->build();
æ°æ®åºé ç½®
é»è®¤çç¥å卿¯ä½¿ç¨çThinkORMã
1ãæ¨¡åé ç½®
é»è®¤ä½¿ç¨ThinkORMãä¿®æ¹æ°æ®åº thinkorm.php é
ç½®
å¦ä½¿ç¨laravelæ°æ®åºï¼é ç½®åèå¦ä¸
- ä¿®æ¹æ°æ®åº
database.phpé ç½® - ä¿®æ¹æ°æ®åº
permission.phpçadapteréé å¨ä¸ºlaraveléé å¨
2ãå建 casbin_rule æ°æ®è¡¨
CREATE TABLE `casbin_rule` (
`id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT,
`ptype` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v0` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v1` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v2` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v3` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v4` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v5` VARCHAR ( 128 ) NOT NULL DEFAULT '',
PRIMARY KEY ( `id` ) USING BTREE,
KEY `idx_ptype` ( `ptype` ) USING BTREE,
KEY `idx_v0` ( `v0` ) USING BTREE,
KEY `idx_v1` ( `v1` ) USING BTREE,
KEY `idx_v2` ( `v2` ) USING BTREE,
KEY `idx_v3` ( `v3` ) USING BTREE,
KEY `idx_v4` ( `v4` ) USING BTREE,
KEY `idx_v5` ( `v5` ) USING BTREE
) ENGINE = INNODB CHARSET = utf8mb4 COMMENT = 'çç¥è§å表';
3ãé
ç½® config/redis é
ç½®
4ãéå¯webman
php start.php restart
æè
php start.php restart -d
使ç¨
å®è£ æååï¼å¯ä»¥è¿æ ·ä½¿ç¨:
use Casbin\WebmanPermission\Permission;
// adds permissions to a user
Permission::addPermissionForUser('eve', 'articles', 'read');
// adds a role for a user.
Permission::addRoleForUser('eve', 'writer');
// adds permissions to a rule
Permission::addPolicy('writer', 'articles','edit');
ä½ å¯ä»¥æ£æ¥ä¸ä¸ªç¨æ·æ¯å¦æ¥ææä¸ªæé:
if (\Casbin\WebmanPermission\Permission::enforce('eve', 'articles', 'edit')) {
echo 'æåä½ ï¼éè¿æé认è¯';
} else {
echo '对ä¸èµ·ï¼æ¨æ²¡æè¯¥èµæºè®¿é®æé';
}
å¤å¥é©±å¨é ç½®
$permission = \Casbin\WebmanPermission\Permission::driver('restful_conf');
// adds permissions to a user
$permission->addPermissionForUser('eve', 'articles', 'read');
// adds a role for a user.
$permission->addRoleForUser('eve', 'writer');
// adds permissions to a rule
$permission->addPolicy('writer', 'articles','edit');
if ($permission->enforce('eve', 'articles', 'edit')) {
echo 'æåä½ ï¼éè¿æé认è¯';
} else {
echo '对ä¸èµ·ï¼æ¨æ²¡æè¯¥èµæºè®¿é®æé';
}
æ´å¤ API åè Casbin API ã
æç¨
- Casbinæé宿ï¼å ¥é¨å享(䏿)
- Casbinæé宿ï¼åºäºè§è²çRBACææ
- Casbinæé宿ï¼RESTfulåä¸é´ä»¶ä½¿ç¨
- Casbinæé宿ï¼å¦ä½ä½¿ç¨èªå®ä¹å¹é 彿°
- Webman宿æç¨ï¼å¦ä½ä½¿ç¨casbinæéæ§å¶
æè°¢
Casbinï¼ä½ å¯ä»¥æ¥çå ¨é¨ææ¡£å¨å ¶ å®ç½ ä¸ã
è§£é¤ https://github.com/PHP-DI/PHP-DIä¾èµçè§£å³æ¹æ¡ï¼ä¸æ¨èï¼
1ãå¸è½½DIä¾èµå
ï¼composer remove php-di/php-di
2ãä¿®æ¹ï¼Casbin\WebmanPermission\Permission æä»¶
if (is_null(static::$_manager)) {
static::$_manager = new Enforcer($model, Container::get($config['adapter']),false);
}
æ¿æ¢ä¸º
if (is_null(static::$_manager)) {
if ($config['adapter'] == DatabaseAdapter::class) {
$_model = new RuleModel();
} elseif ($config['adapter'] == LaravelDatabaseAdapter::class) {
$_model = new LaravelRuleModel();
}
static::$_manager = new Enforcer($model, new $config['adapter']($_model), false);
}
è¦å太é«ï¼ä¸å»ºè®®è¿ä¹æï¼æ´å¤äºè§£ï¼https://www.workerman.net/doc/webman/di.html