Sar*_*est 6 yii2 yii2-advanced-app
以下场景:
我在Yii2的高级模板中有一个多租户Web应用程序.
此应用程序有三个门户:
- 后端
- 仪表板
- 前端
每个门户都有自己的用户表进行身份验证.
(-frontend_user,
-dashboard_user,
-backend_user)
前端和仪表板最终可以与租户的名称联系,例如:
当用户尝试登录仪表板或前端时,我必须检查他们是否有权登录.这通过列联表发生(例如:dashboard_user_tenant)
现在我想为仪表板应用程序构建一个rbac.
但是角色不应该挂在仪表板用户身上,而应该挂在dashboard_user_tenant(列联表)上,因为权限可以在每个租户的仪表板中更改.
Yii2有自己的rbac系统,但据我所知,到目前为止,它并不符合我的需要.
有没有机会定制Yii2的rbac或者更好地构建我自己的自定义解决方案?也许是我自己的组件?
我希望我的描述足够清楚:)
小智 3
我在一个项目中也有类似的愿望,但我没有创建自己的完整 RBAC 系统,而是重写了一种检查角色的方法
在我的 User 组件类中,我扩展了 \yii\web\User,并覆盖了该类的 can() 函数。这让我可以使用自己的方式来检查适当的权限。例如
<?php
namespace app\modules\users\models;
use Yii;
use yii\web\User as WebUser;
use app\modules\users\models\UserPermissionManager;
class User extends WebUser
{
public function can( $operation, $params = [], $allowCaching = true )
{
if(Yii::$app->user->isGuest)
{
return false;
}
return ( new UserPermissionManager() )->has( $operation );
}
}
Run Code Online (Sandbox Code Playgroud)
在UserPermissionManager类中,它查询一个充满“users:access”、“users:edit”等权限的数据库表
他们都分配有特定的用户级别,这与我在用户数据库表中设置的用户级别相关。
can() 函数所需要做的就是返回 true 或 false,具体取决于该用户是否有权执行所要求的操作。您可以随心所欲地处理这个问题。
这是一个相当大的系统,无法在一篇文章中完整解释,但我希望它能稍微有所帮助,如果我可以更好地解释任何内容,请随时告诉我!