在各种访问控制系统中,角色定义一组用户并将权限组织成更易于管理的结构。
当我想向具有不同角色的用户授予访问权限时,我遇到了问题。 当我在表上下文中存储一些角色时,我为此创建了一个自定义投票者。 当我想向具有不同角色的用户授予访问权限时,我遇到了问题。 当我在表上下文中存储一些角色时,我为此创建了一个自定义投票者。 <?php namespace App\Security\Voter; use App\Constants\UserRoles; use App\Entity\Team; use App\Entity\User; use App\Repository\UserTeamRepository; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; class TeamVoter extends Voter { public function __construct( private UserTeamRepository $userTeamRepository, ) {} /** * @inheritDoc */ protected function supports(string $attribute, mixed $subject): bool { if (!in_array($attribute, UserRoles::TEAM_ROLES)) { return false; } return $subject instanceof Team; } /** * @inheritDoc */ protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool { $user = $token->getUser(); if (!$user instanceof User) { return false; } $team = $subject; if (in_array($attribute, UserRoles::TEAM_RELATED_ROLES)) { return $this->voteOnTeamRelatedAttribute($attribute, $user, $team); } return match($attribute) { UserRoles::ROLE_TEAM_ADMIN => $this->canEdit($user, $team), UserRoles::ROLE_TEAM_OWNER => $this->canDelete($user, $team), default => false, }; } private function voteOnTeamRelatedAttribute(string $attribute, User $user, Team $team): bool { $userRoles = $this->userTeamRepository->getUserTeamRoles($user, $team->getExternalUuid()); if (!$userRoles) { return false; } return match($attribute) { UserRoles::ROLE_TEAM_MEMBER_ADMIN => in_array(UserRoles::ROLE_TEAM_MEMBER_ADMIN, $userRoles), UserRoles::ROLE_TEAM_MEMBER => in_array(UserRoles::ROLE_TEAM_MEMBER, $userRoles), default => false, }; } private function canEdit(User $user, Team $team): bool { if ($this->canDelete($user, $team)) { return true; } return in_array(UserRoles::ROLE_TEAM_ADMIN, $user->getRoles()); } public function canDelete(User $user, Team $team): bool { return $team->getOwner() === $user || $team->getCreator() === $user; } } 现在我希望具有角色 ROLE_TEAM_ADMIN 的用户或具有角色 ROLE_TEAM_MEMBER_ADMIN 的用户可以访问该方法(注意: ROLE_TEAM_ADMIN 更多的是编辑所有团队的全局角色,而 ROLE_TEAM_MEMBER_ADMIN 更专注于单个团队,因此自定义投票者检查mm表的内容) 这是我的控制器中受保护的方法: #[Route('/rest/team/{externalUuid}/member/add', name: 'add_team_member', methods: ["PUT"])] #[IsGranted(UserRoles::ROLE_TEAM_ADMIN, subject: 'team'), IsGranted(UserRoles::ROLE_TEAM_MEMBER_ADMIN, subject: 'team')] public function addTeamMember(Request $request, Team $team): JsonResponse { $request = $this->transformJsonBody($request); ... 文档表示可以配置授予决策策略,但其默认值设置为“肯定”,这意味着如果参与授予的其中一位投票者表示可以,则授予访问权限。 我的问题是,这并没有按预期工作,而是遵循“一致”决策模式。我已经浏览过 stackoverflow 上的这个主题,有些人建议使用表达式,但这些答案已经过时了,因为它适用于 symfony 5 和已弃用的 Sensio 安全包。 调试后,我注意到 Symfony\Component\Security\Core\Authorization\AccessDecisionManager 类收集结果(在collectResults方法中),查找投票者并在此基础上构建其决策,但属性数组始终带有一个属性只是。 所以我猜我的注释是以错误的方式定义的,但我在文档中找不到任何有关如何处理决策管理器的相关示例,显然设置一个又一个注释是不够的。 有人有好的方法来处理这个问题吗? 我相信使用多个 IsGranted() 调用与使用表达式 $this->isGranted() && $this->isGranted() 相同。 要使用 OR 逻辑运算符而不是 AND,请查看 表达式语法。您可以在基础 #[IsGranted(string)] 的能力之上进行非常复杂的检查: use Symfony\Component\ExpressionLanguage\Expression; // ... #[Route('/rest/team/{externalUuid}/member/add', name: 'add_team_member', methods: ["PUT"])] #[IsGranted( new Expression( 'is_granted("' . UserRoles::ROLE_TEAM_ADMIN . '", subject) or ' . 'is_granted("' . UserRoles::ROLE_TEAM_MEMBER_ADMIN . '", subject)' ), subject: 'team' ] public function addTeamMember(Request $request, Team $team): JsonResponse { $request = $this->transformJsonBody($request); // ... }
我正在使用 Discord.net,但我无法让此代码工作...... 我的代码 使用系统; 使用系统.IO; 使用 System.Linq; 使用 System.Threading.Tasks; 使用不和谐; 使用 Discord.WebSo...
我正在 Minikube 上练习 Kubernetes 中的 RBAC。我已经创建了一个具有批准证书的用户。现在,我想与该用户练习角色和角色绑定。然而,当我尝试访问 Min...
为什么 CloudFormation 使用奇怪的角色来执行更新?
我试图更新堆栈以向角色添加策略。我用于推送堆栈更新的角色具有 AdministratorAccess,因此我预计更新不会遇到权限问题。然而,...
如何使用 PHP 和 Postman 来使用 Azure 应用程序角色
有关 Azure 应用程序角色和 PHP 的几个问题。 据我了解,我可以通过 REST API 或 Microsoft Graph 获取应用程序角色。我希望使用 API 路线并在 Stack 上找到了一些帖子
我目前正在学习MySQL中的用户权限和角色。目前,我正在学习如何创建自定义角色,向他们授予权限,最后创建一些用户只是为了测试这个......
liferay 7.4 - 我尝试以编程方式添加角色,但在尝试查看角色页面时出现错误
我正在尝试以编程方式添加角色。它最初有效。我可以在数据库中看到它,但是当我以管理员身份登录门户时,当我进入角色页面时出现错误“Ro...
我正在使用 Strapi 3.6.10。 当我通过 http://host:1337/auth/local/register 创建用户时,我无法实现所需的用户角色。它始终是经过身份验证的,即使我直接将其设置为另一个......
无法将 KMS 密钥应用到 AWS CloudWatch 日志组
我尝试在 Amazon CloudWatch 中创建日志组时添加对称 KMS 密钥。我已经以 root 用户身份登录。密钥已创建并且确实存在。但仍然出现以下错误: 有吗
如何将 keycloak 角色引入我的 Spring boot 应用程序? 设置好项目后,登录和注销工作正常,但是keycloak中定义的角色在spring内部不可用...
可以创建帖子但看不到为帖子工具安装的插件的 WordPress 用户角色
当我在 WordPress 帐户中分配角色(例如可以创建帖子的编辑或作者)时,他们无法查看或使用帖子工具中安装/集成的插件(例如:复制...
创建 AKS 集群所需的最低权限是什么? 需要知道应用程序附加的“工作功能角色”列表(在应用程序注册中创建)以及这些角色
目标类 [Spatie\Permission\Middlewares\RoleMiddleware] 不存在
好吧,我对 laravel 还算陌生,我正在尝试使用 Spatie 来获取角色和权限,但还是发生了这个错误,即使我已经在 kernel.php 中编写了类名: 好吧,我对 laravel 还算陌生,我正在尝试使用 Spatie 来获取角色和权限,但还是发生了这个错误,即使我已经在 kernel.php 中编写了类名: <?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array<int, class-string|string> */ protected $middleware = [ // \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, \Illuminate\Http\Middleware\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** * The application's route middleware groups. * * @var array<string, array<int, class-string|string>> */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; /** * The application's middleware aliases. * * Aliases may be used instead of class names to conveniently assign middleware to routes and groups. * * @var array<string, class-string|string> */ protected $middlewareAliases = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class, 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, **'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,** 'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class, 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, ]; } 我是否遗漏了什么或写错了什么? (顺便说一句,如果有帮助的话,我使用 Laravel v10.30.1) 我尝试使用此路由访问视图: Route::middleware('role:super-admin')->get('/dashboard', [AdminController::class, 'index'])->name('admin'); 供应商框架告诉我这一点: \public\index.php : 51 require_once 下面是发生错误的行: $app = require_once __DIR__.'/../bootstrap/app.php'; $kernel = $app->make(Kernel::class); **$response = $kernel->handle(** $request = Request::capture() )->send(); 尝试使用 \Middleware\ 代替 \Middlewares\ 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class, 'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class,
自从在 PostgreSQL 中使用某些登录/角色后,EF Core 更新不起作用
我尝试更新现有的数据库(代码优先)。表 __EFMigrationsHistory 已经存在,它应该只是一个更新。 这是我在对数据库进行一些更改后遇到的错误...
有没有办法使用cloudformation创建aws lambda执行角色?
我正在尝试使用 cloudformation 创建一个 lambda 函数,但它需要 lambda 执行角色 - 有没有一种方法可以使用 cloudformation 生成一个 lambda 函数?
我创建了一个node.js应用程序(巴士票预订应用程序)。 MongoDB 是我正在使用的数据库系统。我还没有完成前端。我正在使用 Postman 进行 API 查询。 为了认证,我...
当您尝试创建 EKS 集群时,会有一个 IAM 角色框,同样,当您尝试创建工作节点时,会有一个 IAM 角色框。该框是空白的,有一个下拉菜单。我不是
React 应用程序使用 Microsoft SSO 进行登录,但从单独的数据库获取角色
我正在努力将 Microsoft SSO 添加到我的 React 应用程序中。我正在关注我发现的本教程:https://www.m-sterspace.io/posts/role-auth-azure-react#24-replace-their-authjs-component 我有...
我正在尝试这个 @commands.has_role(“购买/销售支持”) @bot.hybrid_command(name="cookie_recipe", description="发送 Cookie 食谱") 异步 def cookie_recipe(ctx...
我由具有全局权限的用户在 MariaDB 中创建角色: 创建角色 role_test 创建后,角色在“角色映射”中可见: 从 mysql.roles_mapping 中选择*; ...