简单操作权限就一个函数足够了,甚至5-6个表足够可以了,没必要搞那么复杂,也没必要瞎搞误人子弟啊

本文介绍了一种简洁实用的权限管理系统设计方案,包括用户表、角色表、权限表等关键组件,并提供了一个通用的权限检查函数示例,同时强调了合理规划权限码的重要性。

有句俗话叫“折腾来折腾去,又折腾回原点了”,这就对了,就应该是回到最原点才是硬道理。

1.用户表(有哪几个用户)
2.角色表(有哪几个角色)
3.用户角色关联表(那些用户属于那些角色)
4.权限表(有哪几个权限需要分配)
5.权限存储表(用户有哪些权限,角色有哪些权限,可以分开也可以和在一起)

就一个判断权限函数 例如 
CheckPermission(String userID, String permissionCode)
IsAuthorization(String userID, String permissionCode) 
基本上可以满足要求了。

通常的需求分析
1. 各个页面上的按就的操作,列的操作等。
CheckPermission(userID, “PageA.BtnAdd”) 有没有对添加按钮有操作权限?例如添加权限。
CheckPermission(userID, “PageA.BtnDelete”) 有没有对添加按钮有操作权限?例如添加权限。
CheckPermission(userID, “PageA.TableB.ColumnC”) 有没有列C的查看权限。
2. 对数据表,字段的访问权限控制等
CheckPermission(userID, “TableA”) 有没有访问这个表的权限。
CheckPermission(userID, “TableA.Access”)
CheckPermission(userID, “TableA.Delete”)
CheckPermission(userID, “TableA.ColumnB”) 对列的访问权限。
CheckPermission(userID, “TableA.ColumnB.Access”) 对列的访问权限。
CheckPermission(userID, “TableA.ColumnB.Delete”) 对列的访问权限。
。。。。。。 你想怎么来就怎么来吧,想怎么想象就怎么想象,好用简单是硬道理。

 

或者你封装一下这个函数
CheckColumnPermission(String userID, String table, String column)
{
    return CheckPermission(userID, “table.column.Access”)
}

 

说白了,permissionCode 里你想写啥都可以,都可以判断,只是你合理的规划命名方式就可以了,
没必要搞太负责太折腾,真的一个简单的道理,可以做出非常复杂的东西来,不要把简单问题复杂化了,
吧复杂问题简单化才是硬道理,暂不讨论数据集权限问题,就是对数据的过滤权限,那以超出本贴的讨
论范围。

很早很早的时候,我看过 0,1什么代表的权限,那真的不太好用,除非权限很少。
也在很早的时候,看过 1代表啥权限,2代表啥权限,4代表啥权限,8又代表啥权限,
1+2+4+8 等来表示,有那些权限等,当时觉得很神奇,现在想想都是瞎扯蛋。

就因为我天天研究权限啊啥的,与时代落伍了,这玩意儿是有需要,但是没啥大用,
还是以业务为核心,还是以网络应用为核心,搞搞电子商务是硬道理,要赚网络的钱
才是硬道理,时代已经变了,有一个朋友说,醒醒吧,现在是电子商务时代了,说得对啊,我听进去了。

 

将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。
<think>我们正在处理用户关于SRS(Simple Realtime Server)的问题,特别是关于RTMP转SRT的功能。用户已经尝试配置但未成功,需要帮助。 用户的问题:srs支持srt转为rtmp,但支持rtmp转srt吗? 根据SRS的文档和功能,SRS支持将SRT流转为RTMP流(即SRT作为输入,RTMP作为输出)。但是,用户想要的是将RTMP流转为SRT流(即RTMP输入,SRT输出)。在SRS中,这可以通过SRT输出功能实现。 在SRS中,RTMP转SRT是通过`SRT输出`(srt_output)功能实现的。具体来说,可以在vhost中配置srt_output,将RTMP流推送到SRT服务器。 配置步骤: 1. 确保SRS编译时启用了SRT支持(使用`--srt=on`选项)。 2. 在配置文件中,为vhost配置srt_output部分,指定当匹配到某个RTMP流时,将其转推到SRT服务器。 示例配置: 假设我们有一个RTMP流:rtmp://localhost/live/mystream 我们想将其转换为SRT流并推送到srt://remote_srt_server:6666 配置如下: ``` vhost __defaultVhost__ { srt_output { output { # 当RTMP流的app为live,流名为mystream时,执行输出 if rtmp_app == "live" && rtmp_stream == "mystream"; # 输出到SRT服务器,注意streamid的设置 output srt://remote_srt_server:6666?streamid=#!::r=live/mystream,m=publish; } } } ``` 注意:streamid的格式很重要,它告诉SRT服务器如何解析流。其中,`r=live/mystream`示应用名和流名,`m=publish`示模式为发布(推流)。 另外,如果要在本地启动一个SRT服务器接收,可以使用SRS的SRT服务,监听6666端口,配置srt_server。 但是,用户可能已经配置了SRT输入(即srt_server),现在需要将已有的RTMP流转成SRT输出,所以只需要配置srt_output。 用户遇到的困难可能是配置不正确,或者对SRT输出模式不熟悉。 下面给出一个完整的配置示例,包括SRT输入和RTMP转SRT输出: 注意:SRS的SRT输入(作为服务器接收SRT流并转RTMP)和SRT输出(将RTMP流转推为SRT流)可以同时配置。 完整示例配置(conf/rtmp_srt.conf): ``` listen 1935; listen 6666; # SRT监听端口 daemon off; srs_log_tank console; vhost __defaultVhost__ { # 开启SRT输入(将SRT流转为RTMP) srt { enabled on; listen 6666; } # 将RTMP流转推为SRT流(RTMP转SRT) srt_output { output { # 示例:将app为live,流名为mystream的RTMP流转推为SRT流到另一个SRT服务器 if rtmp_app == "live" && rtmp_stream == "mystream"; output srt://127.0.0.1:6667?streamid=#!::r=live/mystream,m=publish; } } } ``` 在这个配置中: - SRS在6666端口监听SRT输入(作为SRT服务器),将SRT流转为RTMP流(内部流转)。 - 同时,当有RTMP流(rtmp://localhost/live/mystream)发布时,会触发srt_output规则,将该流转推为SRT流到127.0.0.1:6667(另一个SRT服务器,可以是另一个SRS实例或支持SRT的播放器)。 如果用户想要将RTMP流转为SRT流并输出给一个SRT播放器,那么播放器应该作为接收方(subscriber),而SRS的srt_output相当于发布方(publisher)将流推送给SRT播放器。因此,播放器需要监听一个端口,而SRS的srt_output配置中的output地址应该是播放器的地址。 但是,注意:SRT输出模式是推模式,所以播放器需要先启动监听,然后SRS才能推流成功。 常见问题: 1. 配置位置:srt_output必须放在vhost内部。 2. 条件判断:if语句用于匹配RTMP流,条件可以是rtmp_app和rtmp_stream。 3. 输出地址:output指定SRT服务器的地址和端口,以及streamid。其中streamid的格式必须正确,特别是m=publish示SRS作为发布者。 如果用户已经尝试了一天,请检查以下方面: - SRS编译时是否支持SRT(运行./objs/srs -v查看,如果有srt则支持) - 配置文件中srt_output的语法是否正确 - 输出的SRT服务器地址是否可达,端口是否开放 - 接收端(SRT播放器或服务器)是否已启动并监听 最后,根据用户之前的问题,他们可能遇到了配置错误,所以这里给出一个简化可用的配置,并解释。 注意:用户之前的问题中出现了配置错误,现在这个配置是修正后的。 如果用户按照这个配置还是不行,可能需要进一步检查网络和接收端。 最后,按照要求,在回答后提出3-5个相关问题。</think>### SRS RTMP转SRT功能详解与配置方案 SRS 6.0支持完整的RTMP转SRT功能,但需要正确配置输出映射规则。以下是完整解决方案: #### 核心配置方案 ```conf vhost __defaultVhost__ { # SRT输入配置(SRT转RTMP) srt { enabled on; listen 6666; latency 500; } # RTMP转SRT输出配置(关键部分) srt_output { output { # 匹配所有RTMP流 if rtmp_app == "*" && rtmp_stream == "*"; # 输出到本地SRT端口 output srt://127.0.0.1:7777?streamid=#!::r=${rtmp_app}/${rtmp_stream},m=publish; # 或输出到远程服务器 # output srt://remote_ip:9999?streamid=#!::r=${rtmp_app}/${rtmp_stream},m=publish; } } } ``` #### 关键配置说明 1. **streamid格式要求**: ```streamid #!::r={app}/{stream},m=publish ``` - `r=` 定义应用名和流名(必须包含斜杠) - `m=publish` 声明为发布模式(推流端) 2. **变量映射**: | 变量 | 说明 | 示例值 | |------|------|--------| | `${rtmp_app}` | 原RTMP应用名 | `live` | | `${rtmp_stream}` | 原RTMP流名称 | `mystream` | 3. **端口规划**: - `6666`:SRT输入端口(接收外部SRT流) - `7777`:SRT输出端口(发送转换后的SRT流) #### 验证流程 1. **推RTMP流**: ```bash ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost/live/mystream ``` 2. **接收SRT流**: ```bash ffplay srt://127.0.0.1:7777?streamid=#!::r=live/mystream,m=request ``` 3. **监控日志**: ```log [TRACE] RTMP to SRT: app=live, stream=mystream -> srt://127.0.0.1:7777 [DEBUG] SRT output: packets=1200, bytes=4.2MB ``` #### 常见问题排查 1. **流无法接通**: ```bash # 检查端口监听 ss -ulnp | grep -E '6666|7777' # 检查流映射 curl http://localhost:1985/api/v1/srto?app=live&stream=mystream ``` 2. **时间戳问题**: 在`vhost`块添加: ```conf time_jitter full; mix_correct on; ``` 3. **防火墙设置**: ```bash sudo ufw allow 7777/udp sudo ufw allow 6666/udp ``` > **性能提示**:对于高并发场景,添加工作进程: > ```conf > worker_processes 4; > worker_cpu_affinity auto; > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值