请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教一下,stm32f103裸机移植letter-shell,怎么进行用户权限管理啊?

[复制链接]
fengdao 提问时间:2022-4-21 23:19 / 未解决

如题,想设置一下用户管理权限,和管理者管理权限

收藏 评论3 发布时间:2022-4-21 23:19

举报

3个回答
STMWoodData 回答时间:2022-4-22 11:28:03

权限系统说明

letter shell 3.x的权限管理同用户定义紧密相关,letter shell 3.x使用8个bit位表示命令权限,当用户和命令的权限按位与为真,或者命令权限为0时,表示该用户拥有此命令的权限,可以调用该命令

fengdao 回答时间:2022-4-22 17:09:55

STMWoodData 发表于 2022-4-22 11:28</p>
<h2></h2>
<p>权限系统说明</p>
<p>

[md]我看到了这个,能说详细一点吗?

SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0),,,)

只有SHELL_CMD_PERMISSION(0)命令权限为0时,该函数或功能才能用,而且这个0是常量,不知道怎么修改,SHELL_EXPORT_CMD()也不知道什么时候导入命令列表的,只知道输出时函数的位置,

如果库中#define不定义密码,就全部都能用,也就无法修改密码再登录了;

而且如果设置了密码,一开始初始化之后就要密码了,你没有密码什么都用不了,同样的问题,无法权限管理

STMWoodData 回答时间:2022-4-22 23:16:45
/**
 * @brief shell 检查命令权限
 * 
 * @param shell shell对象
 * @param command ShellCommand
 * 
 * @return signed char 0 当前用户具有该命令权限
 * @return signec char -1 当前用户不具有该命令权限
 */
signed char shellCheckPermission(Shell *shell, ShellCommand *command)
{
    return ((!command-&gt;attr.attrs.permission
                || command-&gt;attr.attrs.type == SHELL_TYPE_USER
                || (command-&gt;attr.attrs.permission 
                    &amp; shell-&gt;info.user-&gt;attr.attrs.permission))
            &amp;&amp; (shell-&gt;status.isChecked
                || command-&gt;attr.attrs.enableUnchecked))
            ? 0 : -1;
}

那个常数0可以改的,看上面权限检查可以知道命令的权限为0的时候,所有用户都可以执行有权限。假如权限由0改为0x01就表示当定义的用户权限也为0x01的有这个命令权限。定义的用户权限为0x02的不能执行0x01权限的命令。

/**
 * @brief shell 命令权限
 * 
 * @param permission 权限级别
 */
#define     SHELL_CMD_PERMISSION(permission) \
            (permission &amp; 0x000000FF)
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版