Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

About authorization 关于权限管理 是否可以增加 查看权限 #126

Open
bc4250 opened this issue Feb 24, 2023 · 5 comments
Open

Comments

@bc4250
Copy link

bc4250 commented Feb 24, 2023

感谢作者的分享!

曾经偶然发现AgileConfig,没有觉得多大用处,毕竟config file也勘用, 后来为了能够自动化部署,以及信息安全的要求,不泄露关键配置信息,要求配置不能明文写在docker部署的YAML配置文件中, 而使用K8S加密又繁琐,所以考虑导入第三方配置工具,公司有导入Vault,但是主要用于Key Value的配置项保存,没有能够跟.net的configuration很好整合,用户体验差, 所以想起AgileConfig. 目前在比较评估中, 比较的方案是

  1. 用Vault存储机密信息,还是用yaml写config存储到git;
  2. 用Vault存储AgileConfig的token, 用agileconfig保存配置

愿望清单: 1.能够依据用户群组隔离权限,简单的说就是多租户, 信息安全隔离, 如果要变成集中式配置中心,此功能必须要有才好; 2.后端保存资料加密,信息安全的需求;

感谢支持。
关于多租户我感觉干脆每个需要隔离的环境独立部署一套得了,彻底隔离。
加密的话,我感觉需要你们的 infra 做好工作,比如数据库,http 全部走 ssl ,client 侧可以开启配置缓存的加密,这个是已经支持的。这样基本就足够了。

Originally posted by @kklldog in #76 (comment)

感谢作者的回复!

现状:
注册的user可以查看所有的App的配置

期望:
可以增加View的权限限制,可以by App + User隔离, 可以多团队共用一个集中配置中心.

原因:
多团队多项目开发时,可能不同项目间希望对敏感信息保密,所以不允许配置信息被所有用户都可见.

补充建议:
我看了一下source code,发现已经实现了完善的authorization框架了, 可否增加一个View的权限, 这样虽不是多租户,但是也达成了by App + User隔离的功能.
貌似改动不大, 只要在ConfigController.cs中的Search那里也加上权限管理即可

[HttpGet]
public async Task Search(string appId, string group, string key, OnlineStatus? onlineStatus,
string sortField, string ascOrDesc, string env, int pageSize = 20, int current = 1)

@kklldog
Copy link
Collaborator

kklldog commented Feb 24, 2023

是的,不麻烦,不过既然不麻烦我当时怎么就这么设计了。我当时是这么想的来则。。。是不是有什么问题,我得想一下。

@bc4250
Copy link
Author

bc4250 commented Feb 24, 2023

是担心看不见继承的item吗?

@bc4250
Copy link
Author

bc4250 commented Mar 13, 2023

是的,不麻烦,不过既然不麻烦我当时怎么就这么设计了。我当时是这么想的来则。。。是不是有什么问题,我得想一下。

有新的发现吗

@kklldog
Copy link
Collaborator

kklldog commented Mar 14, 2023

是的,不麻烦,不过既然不麻烦我当时怎么就这么设计了。我当时是这么想的来则。。。是不是有什么问题,我得想一下。

有新的发现吗

没空啊。。。😂

@bc4250
Copy link
Author

bc4250 commented Mar 26, 2023

当我再次看了一下代码后, 发现想要在所有的read相关的方法上加权限过滤不是那么简单,特别是search这类的,没有合适的参数作为检查, 所以需要考虑如下几处:

  1. 对ConfigController,增加一个filter function, 在search需要返回的结果之前过滤一下, 这样可能有performance的问题, 每次查询都要filter, 如果总项目数只有几百个,问题应该不大, 多了就加载慢,体验差; 一个替代方案用临时表保存下User与App的关系,用空间换时间,这样entity之间的join会简单些,performance问题也可克服。
  2. 或者对一般用户停用不带id的search,只有superadmin可以使用, 增加一个可以加载当前用户能访问的所有App的方法供一般用户使用
  3. 对config的read的必须带ID, 所有的read方法套用现有的filter的做法
  4. AppContoller也增加对App的read过滤, 类似ConfigController的做法.

您看看还有哪里没考虑到的吗?

关于Role,我的理解如下,您的看法是?

  • SuperAdmin
  • App-Admin Team Leader or运维单位
  • App-Edit Developer or 一般运维
  • App-View 如果需求不强烈,可以跟Edit共用, 毕竟有Publish的人把关.
  • App-Publish & Rollback, 简化版可以考虑跟Admin共用, 也可以单独授权.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants