首页 > 其他分享 >csp:202206-3:角色授权

csp:202206-3:角色授权

时间:2023-03-18 12:56:37浏览次数:40  
标签:tmp map 202206 name int role user 授权 csp

这一题我认为,难就难在处理输入和定义数据结构。只要数据结构定义对了,那么后面的操作就很简单了。附上正确代码:

#include<iostream>
#include<string>
#include<unordered_set>
#include<unordered_map>
#include<vector>
using namespace std;

int n,m,q;

struct role{
  unordered_set<string>ops;
  unordered_set<string>source_class;
  unordered_set<string>source_names;
};

struct group{
  vector<string> roles;
};

struct user{
  vector<string> roles;
};

unordered_map<string, role> role_map;
unordered_map<string, group> group_map;
unordered_map<string, user> user_map;

bool check_role(string role,string op,string sclazz,string name){
  return (role_map[role].ops.count(op)>0||role_map[role].ops.count("*")>0)
    &&(role_map[role].source_class.count(sclazz)>0||role_map[role].source_class.count("*")>0)
    &&(role_map[role].source_names.size()==0||role_map[role].source_names.count(name)>0);
}

int main(){
  ios::sync_with_stdio(0);
//  cin.tie(0);
//  cout.tie(0);
  cin>>n>>m>>q;
  int nv,no,nn,ns;
  string tmp,role_name;
  for(int i=0;i<n;i++){
//    cout<<"role\n";
    cin>>role_name;
    cin>>nv;
    for(int j=0;j<nv;j++){
      cin>>tmp;
      role_map[role_name].ops.emplace(tmp);
    }
    cin>>no;
    for(int j=0;j<no;j++){
      cin>>tmp;
      role_map[role_name].source_class.emplace(tmp);
    }
    cin>>nn;
    for(int j=0;j<nn;j++){
      cin>>tmp;
      role_map[role_name].source_names.emplace(tmp);
    }
  }
  for(int i=0;i<m;i++){
//    cout<<"role_relate\n";
    cin>>role_name;
    cin>>ns;
    char type;
    for(int j=0;j<ns;j++){
      cin>>type;
      cin>>tmp;
      if(type=='u'){
        user_map[tmp].roles.push_back(role_name); 
      }else if(type=='g'){
        group_map[tmp].roles.push_back(role_name);
      }
    }
  }
  string user_name;
  int ng;
  string op,sclazz,sname;
  for(int i=0;i<q;i++){
//    cout<<"query\n";
    cin>>user_name;
    cin>>ng;
    vector<string> groups(ng);
    for(int j=0;j<ng;j++){
      cin>>tmp;
      groups[j]=tmp;
    } 
    cin>>op>>sclazz>>sname;
    bool flag=0;
    // check user
    if(user_map.count(user_name)>0){
      for(string r:user_map[user_name].roles){
        if(check_role(r,op,sclazz,sname)){
          cout<<"1\n";
          flag=1;
          break;
        }
      }
    }
    if(flag) continue;
    // check group
    for(int j=0;j<ng;j++){
      for(string r:group_map[groups[j]].roles){
        if(check_role(r,op,sclazz,sname)){
          cout<<"1\n";
          flag=1;
          break;
        }
      }
      if(flag) break;
    }
    if(!flag){
      cout<<"0\n";
    }
  }
  return 0;
} 

标签:tmp,map,202206,name,int,role,user,授权,csp
From: https://www.cnblogs.com/dykkk/p/17229742.html

相关文章

  • csp202209-2
    题目:计算机软件能力认证考试系统01背包问题#include<bits/stdc++.h>usingnamespacestd;inta[35];intdp[300005];intmain(){intn,x;cin>>n>>x;......
  • SpringSecurity授权原理
    在第二部分中我们讲解的都是用户认证,不管是用户名密码,还是图形验证码等,最终的目的都是一个:让系统知道你到底是谁在访问你的系统,解决的问题是,你是谁?这部分主要讲......
  • vue中 给企业微信自建应用授权(静默授权,手动授权,扫码授权)
    在web开发中,会遇到通过企业微信授权的形式进行免登录或快速登录的需求。如果该应用是企业微信自建应用,那可以在管理平台获取到相应的appId和agentid等必要参数。企业微信......
  • JWT 认证和授权:详细介绍
    JSONWebToken(缩写JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送......
  • Tapdata Cloud 基础课:新功能详解之「授权系统自动分析」,一键定位任务报错原因,快速获取
    【前言】作为中国的“Fivetran/Airbyte”,Tapdata是一个以低延迟数据移动为核心优势构建的现代数据平台,内置60+数据连接器,拥有稳定的实时采集和传输能力、秒级响应的......
  • csp201612-4
    题目:计算机软件能力认证考试系统区间DP为了使霍夫曼编码变成字典序,只需要将挑选顺序改为每次都选择相邻的即可每次合并都是累加合并字母频数*1,等同于霍夫曼编码的一单......
  • csp201612-2
    题目:计算机软件能力认证考试系统#include<bits/stdc++.h>usingnamespacestd;doubleT[10]={0,45,345,1245,7745,13745,22495};doubler[10]={3500,5000,8000,12500,......
  • CSP-J/S2022游记(寄)
    Day-29国庆假期开始了,跟clq大佬一起准备29号的复赛Day-23这个国庆每天早上89点去机房下午56点回家,前面五天做了不少题后面两天就开始摆烂了(写作业去了)也重新把自己......
  • csp201703-2
    这道题暴力能过,最离谱的是,我提交了,通过了100分,返回来看一眼代码发现我的数组只开了a[10].....这数据给的太随意了吧#include<bits/stdc++.h>usingnamespacestd;inta......
  • 如何在 Net6.0 中对 WebAPI 进行 JWT 认证和授权
    一、简介我们做微服务开发,或者说做分布式开发,有一项技术我们是避不开的,那就是WebAPI,在Net6.0中,有两类WebAPI,一类是极简WebAPI,它砍掉了很多冗余的东西,更纯粹的......