使用内置的 rbac 还是自己构建?
Use built-in rbac or build own?
以下场景:
我在 Yii2' 高级模板中有一个多租户 Web 应用程序。
此应用程序具有三个门户:
- 后端
- 仪表板
- 前端
每个门户都有自己的用户 table 进行身份验证。
(-frontend_user,
-dashboard_user,
-backend_user)
可以在末尾使用租户名称访问前端和仪表板,例如:
当用户尝试登录仪表板或前端时,我必须检查他们是否有权登录。
这是通过 偶然事件 table 发生的(例如:dashboard_user_tenant)
现在我想为仪表板应用程序构建一个 rbac。
但角色不应挂在仪表板用户处,而应挂在 dashboard_user_tenant(偶然事件 table),
因为权利可以在每个租户的仪表板中更改。
Yii2 有自己的 rbac 系统,但据我目前的了解,它不符合我的需求。
有机会自定义 Yii2 的 rbac 还是构建我自己的自定义解决方案更好?也许我自己的组件?
希望我的描述够清楚:)
我在我的一个项目中有类似的愿望,但我没有创建自己的完整 RBAC 系统,而是覆盖了一种检查角色的方法
在我的用户组件 class 中,我扩展了 \yii\web\User,并且还覆盖了那个 class 的 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 );
}
}
在 UserPermissionManager class 中,它查询一个数据库 table,该数据库 table 充满了诸如 "users:access"、"users:edit" 等权限
他们都分配了特定的用户级别,这与我在我的用户数据库中设置的用户级别有关table。
can() 函数需要做的只是 return true 或 false,具体取决于此用户是否有权执行所要求的操作。你可以随心所欲地处理这个。
这是一个相当大的系统,无法在一个文件中完整解释 post,但我希望它能对您有所帮助,如果我能解释得更好,请随时告诉我!
以下场景:
我在 Yii2' 高级模板中有一个多租户 Web 应用程序。
此应用程序具有三个门户:
- 后端
- 仪表板
- 前端
每个门户都有自己的用户 table 进行身份验证。
(-frontend_user,
-dashboard_user,
-backend_user)
可以在末尾使用租户名称访问前端和仪表板,例如:
当用户尝试登录仪表板或前端时,我必须检查他们是否有权登录。 这是通过 偶然事件 table 发生的(例如:dashboard_user_tenant)
现在我想为仪表板应用程序构建一个 rbac。
但角色不应挂在仪表板用户处,而应挂在 dashboard_user_tenant(偶然事件 table), 因为权利可以在每个租户的仪表板中更改。
Yii2 有自己的 rbac 系统,但据我目前的了解,它不符合我的需求。
有机会自定义 Yii2 的 rbac 还是构建我自己的自定义解决方案更好?也许我自己的组件?
希望我的描述够清楚:)
我在我的一个项目中有类似的愿望,但我没有创建自己的完整 RBAC 系统,而是覆盖了一种检查角色的方法
在我的用户组件 class 中,我扩展了 \yii\web\User,并且还覆盖了那个 class 的 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 );
}
}
在 UserPermissionManager class 中,它查询一个数据库 table,该数据库 table 充满了诸如 "users:access"、"users:edit" 等权限
他们都分配了特定的用户级别,这与我在我的用户数据库中设置的用户级别有关table。
can() 函数需要做的只是 return true 或 false,具体取决于此用户是否有权执行所要求的操作。你可以随心所欲地处理这个。
这是一个相当大的系统,无法在一个文件中完整解释 post,但我希望它能对您有所帮助,如果我能解释得更好,请随时告诉我!