202206 CSP认证 | 角色授权

2024-03-17 18:20
文章标签 csp 认证 角色 授权 202206

本文主要是介绍202206 CSP认证 | 角色授权,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

角色授权
fine,又是一道acwing上TLE但是平台通过了的,那就酱吧…
直接跟着题目来模拟的…先找到每个用户授予的所有角色,包括用户本身和它所属的用户组。
然后遍历这个角色集合,看是否有操作权限,种类权限以及资源名称权限。如果同时在一个角色下符合三种权限,则此时可以进行操作,退出角色集合的遍历。

跑了两次都是满分(因为我用了auto所以提交的cpp14)
在这里插入图片描述
以下是平台满分代码:

#include<bits/stdc++.h>
using namespace std;
unordered_map<string, unordered_set<string> > role_opt;   //角色可进行的操作
unordered_map<string, unordered_set<string> > role_rtype;  //角色所具有的资源种类
unordered_map<string, unordered_set<string> > role_rname;  //角色可以操作的资源名称unordered_map<string, unordered_set<string> > u_role;     //用户授予的角色名称
unordered_map<string, unordered_set<string> > g_role;     //用户组授予的角色名称int main()
{ios::sync_with_stdio(false);cin.tie(0);int n, m, q;cin >> n >> m >> q;for(int i = 0;i < n;i ++){  //录入角色信息string name, str; int nv, no, nn;cin >> name >> nv;while(nv --){cin >> str;role_opt[name].insert(str);}cin >> no;while(no --){cin >> str;role_rtype[name].insert(str);}cin >> nn;//如果列表为空,则没有限制if(!nn)  role_rname[name].insert("*");while(nn --){cin >> str;role_rname[name].insert(str);}}for(int i = 0;i < m;i ++){string name, str1, str2; int ns;cin >> name >> ns;while(ns --){cin >> str1 >> str2;if(str1 == "u"){u_role[str2].insert(name);}else{g_role[str2].insert(name);}}}while(q --){string uname, op, type, rname, str; int ng;unordered_set<string> group;  //用户组列表cin >> uname >> ng;while(ng --){cin >> str; group.insert(str);}cin >> op >> type >> rname;unordered_set<string> role;  //该用户所授予的全部角色名称for(auto x : u_role[uname]){role.insert(x);}for(auto gname : group){  //每一个用户组for(auto x : g_role[gname]){role.insert(x);}}bool flag = false;for(auto x : role){  //遍历每一个角色bool flag_op = false, flag_type = false, flag_rname = false;if(role_opt[x].count(op) || role_opt[x].count("*")) flag_op = true;if(role_rtype[x].count(type) || role_rtype[x].count("*")) flag_type = true;if(role_rname[x].count(rname) || role_rname[x].count("*")) flag_rname = true;if(flag_op && flag_rname && flag_type){cout << "1\n";flag = true;break;}}if(!flag) cout << "0\n";}return 0;
}

这篇关于202206 CSP认证 | 角色授权的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819752

相关文章

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo