怎么用c语言一行代码写不下写RBAC的代码

说起c语言一行代码写不下中getopt()函数嘚使用方法相信很多学习C++的朋友并不会陌生。本文将由的讲师详细为您介绍关于c语言一行代码写不下中getopt()函数的使用方法的相关常识   

在LinuxΦ,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题例如:./a.out -a1234 -b432 -c -d程序会根据读取的参数执行相应的操作,在c语言一行代碼写不下中这个功能一般是靠getopt()这个函数,结合switch语句来完成的首先来看下面的代码:

    “:”表示必须该选项带有额外的参数,全域变量optarg会指向此额外参数“::”标识该额外的参数可选(有些Uinx可能不支持“::”)。


    如果getopt()找不到符合的参数则会印出错信息并将全域变量optopt設为“?”字符。

现在相信朋友们对于c语言一行代码写不下中getopt()函数的使用方法了解的更加清楚了,作为IT培训的领导品牌为互联网行业培養了无数精英。

 

最近正在为下一项目版本设计权限管理的看到了这篇文章,可以参考参考!

RBAC(Role-Based Access Control基于角色的访问控制),就是用户通过角色与权限进行关联简单地说,一个用户拥有若干角色每一个角色拥有若干权限。这样就构造成“用户-角色-权限”的授权模型。在这种模型中用户与角色之间,角色与权限之间一般者是多对多的关系。(如下图)

角色是什么可以理解为一定数量的权限的集合,权限的载体例如:一个论坛系统,“超级管理員”、“版主”都是角色版主可管理版内的帖子、可管理版内的用户等,这些是权限要给某个用户授予这些权限,不需要直接将权限授予用户可将“版主”这个角色赋予该用户。 

当用户的数量非常大时要给系统每个用户逐一授权(授角色),是件非常烦琐的事情這时,就需要给用户分组每个用户组内有多个用户。除了可给用户授权外还可以给用户组授权。这样一来用户拥有的所有权限,就昰用户个人拥有的权限与该用户所在用户组拥有的权限之和(下图为用户组、用户与角色三者的关联关系)

在应用系统中,权限表现成什么对功能模块的操作,对上传文件的删改菜单的访问,甚至页面上某个按钮、某个图片的可见性控制都可属于权限的范畴。有些權限设计会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类这样构成“用户-角色-权限-资源”的授权模型。而在做数据表建模时可把功能操作和资源统一管理,也就是都直接与权限表进行关联这样可能更具便捷性和易扩展性。(见下图)


请留意权限表Φ有一列“权限类型”我们根据它的取值来区分是哪一类权限,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操作权限、“FILE”表示攵件的修改权限、“ELEMENT”表示页面元素的可见性控制等

这样设计的好处有二。其一不需要区分哪些是权限操作,哪些是资源(实际上,有时候也不好区分如菜单,把它理解为资源呢还是功能模块权限呢)。其二方便扩展,当系统要对新的东西进行权限控制时我呮需要建立一个新的关联表“权限XX关联表”,并确定这类权限的权限类型字符串

这里要注意的是,权限表与权限菜单关联表、权限菜单關联表与菜单表都是一对一的关系(文件、页面权限点、功能操作等同理)。也就是每添加一个菜单就得同时往这三个表中各插入一條记录。这样可以不需要权限菜单关联表,让权限表与菜单表直接关联此时,须在权限表中新增一列用来保存菜单的ID权限表通过“權限类型”和这个ID来区分是种类型下的哪条记录。

到这里RBAC权限模型的扩展模型的完整设计图如下:


随着系统的日益庞大,为了方便管理可引入角色组对角色进行分类管理,跟用户组不同角色组不参与授权。例如:某电网系统的权限管理模块中角色就是挂在区局下,洏区局在这里可当作角色组它不参于权限分配。另外为方便上面各主表自身的管理与查找,可采用树型结构如菜单树、功能树等,當然这些可不需要参于权限分配

版权声明:本文为博主原创文章未经博主允许不得转载。 /yafei/article/details/

本人小菜鸟一只为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群希望光临本博客的囚可以进来交流。寻求共同发展搭建平台。

本人博客也有许多的技术文档希望可以为你提供一些帮助。只为交流技术

  • 以下内容适合Yii 1.0.x,其他版本可能有略微的差别
  • 根据您的评论和反馈,本文会不断进行修改和补充以方便新学习者。

Yii提供了强大的配置机制和很多现成嘚类库在Yii中使用RBAC是很简单的,完全不需要再写RBAC代码所以准备工作就是,打开编辑器跟我来。

在配置数组中增加以下内容:

那这三個数据表怎么建立呢?很简单去看framework/web/auth/schema.sql。注意要和你的自定义的表名称对应起来比如SQL文件中的AuthItem你要修改为pre_auth_item。然后在数据库中运行这个SQL文件Φ的语句

你可能要问,剩下的代码呢我告诉你,没有啦RBAC系统就这样建立起来了。但是为了使用它你需要了解它的运行机制。我会盡量讲的啰嗦一点……(官方的RBAC文档在但是我曾经看了4-5遍才明白。)

你需要了解的是授权项目可分为operations(行动),tasks(任务)和 roles(角色)。

┅个用户拥有一个或者多个角色比如,我们这里有三个角色:银行行长银行职员顾客我们假设:

  • 张行长 有角色:银行行长、银行職员、顾客(人家自己可以存钱嘛)。
  • 王职员 有角色:银行职员、顾客

那么,相应的只要顾客可以做的事情,小李就可以做王职员囷张行长也可以。银行职员可以做的事情王职员和张行长都可以做,小李就不可以了

比如,一个“顾客”可以存钱那么拥有“顾客”角色的张行长、王职员、小李都可以存钱。“银行职员”可以打印顾客的交易记录那么有“银行职员”角色的张行长和王职员都可以,而小李不行必须找一个有“银行职员”角色的人才可以打印详细的交易记录。一个“银行行长”才可以进入银行钱库提钱那么只有張行长可以,因为它才有“银行行长”的角色

这就是基于角色的认证体系,简称RBAC

角色是可以继承的,比如我们规定如下:

  • 凡是“银行荇长”都是“银行职员”也就是说,只要银行职员可以做的事情银行行长都可以做。
  • 凡是“银行职员”都是顾客同上,顾客可以做嘚事情银行职员也可以做

那么角色关系就变成了:

  • 张行长 有角色:银行行长。
  • 王职员 有角色:银行职员

这样更简单了,这就是角色的繼承

一个任务(task)是可以包含另外一个任务的,我们举个例子比如“进入银行”。

我们设定“顾客”这个角色有“进入银行”的权限也就是说,“顾客”可以执行“进入银行”的任务接下来,我们假设“进入柜台”是进入银行的父权限也就是说,“进入柜台”包含“进入银行”只要能“进入柜台”的人都可以“进入银行”。我们把“进入柜台”这个任务权限给“银行职员”

那么从角色上来说,王职员可以进入银行因为王职员的角色是“银行职员”,而“银行职员”包含了“顾客”的角色那么“顾客”可以进行的“任务”對于“银行职员”来说也是可以进行的。而“顾客”可以“进入银行”那么王职员也可以“进入银行”。这是角色的继承带来的

我们洅假设有个赵领导,是上级领导可以进入柜台进行视察。那么我们的任务关系是:

  • 赵领导 有任务:进入柜台。

那么赵领导就可以“進入银行”。因为“进入银行”是被“进入柜台”包含的任务只要可以执行“进入柜台”的人都可以执行“进入银行”。这就是任务的繼承

行动是不可划分的一级。也就是说而一个行动是不能包含其他行动的。假设我们有个行动叫“从银行仓库中提钱”我们把这个荇动作包含“进入柜台”。那么只要可以执行“从银行仓库中提钱”的角色都可以执行“进入柜台”这个任务

  • 一个角色可以包含另外一個或者几个角色。
  • 一个角色可以包含另外一个或者几个任务
  • 一个角色可以包含另外一个或者几个行动。
  • 一个任务可以包含另外一个或者幾个任务
  • 一个任务可以包含另外一个或者几个行动。
  • 一个行动只能被角色或者任务包含行动是不可以包含其他,也不可再分

这样,僦形成了一个权限管理体系关于“任务”和“行动”,你不必思考其字面上的意义这两者就是形成两层权限。

我们建立了RBAC权限管理僦需要进行对权限的WEB管理。这些就需要你自己写代码了

根据不同种类的项目调用下列方法之一定义授权项目:

一旦我们拥有一套授权项目,我们可以调用以下方法建立授权项目关系:

最后我们调用下列方法来分配角色项目给各个用户:

下面我们将展示一个例子是关于用所提供的API建立一个授权等级:

也就是说,你需要自己写一个管理界面来列出你的角色、任务、行动,然后可以在这个界面上进行管理仳如增加、删除、修改。

假设你在你的管理界面进行了赋权那么可以在程序里面进行权限检查:

// 这里可以显示表单等操作
// 检查没有通过嘚可以跳转或者显示警告
上面的代码就检查了用户是否可以执行“createPost”,这createPost可能是一个任务也可以是一个行动。

对于很多说Yii权限体系RBAC不好鼡的人其实都没有看懂文档综合我的体验,我感觉Yii框架的RBAC是我用过的框架里面最好用的而且是需要自己写代码最少的。

Yii的RBAC有更加高级嘚用法比如“业务规则”,“默认角色”你可以去参考官方文档。

我知道会有部分人仍旧不理解RBAC,或者不会用Yii的RBAC没有关系,你可鉯在下方的评论框里提问


我要回帖

更多关于 c语言一行代码写不下 的文章

 

随机推荐