上一篇中,简单的说了一下,如何从窗体中获取所有的权限对象(我一般都称为权限实体),对于数据库开发而言,比较多的都是判断,当前用户是否有添加,查看,编辑,删除的权限.当然还有其它扩展的,如审核之类的.

下面就来说说权限实体 Lily.ComponentFramework.PermissionBase 要实现,我这样的权限管理,并不需要按我的权限实体来设计,当然你的系统必须要采用类似于ORM的东西或是有把表映射为对象的东西.Lily.ComponentFramework.PermissionBase就是从已有的实体对象继承而来的(我系统的ORM是一个轻量经的)

首先来看看,添加,查看,编辑,删除权限的实现

  ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否是添加的权限.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-21    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HasAdd() As Boolean
        Get
            Return Me.Has("添加")
        End Get
    End Property

''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否有删除的权限.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-21    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HasDelete() As Boolean
        Get
            Return Me.Has("删除")
        End Get
    End Property

''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否有更改的权限.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-21    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HasModify() As Boolean
        Get
            Return Me.Has("修改")
        End Get
    End Property

''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否是有查看的权限.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-21    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HasLook() As Boolean
        Get
            Return Me.Has("查看")
        End Get
    End Property

''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否有执行某项操作的权限.
    ''' </summary>
    ''' <param name="strDo">操作</param>
    ''' <returns></returns>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-25    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable Function Has(ByVal strDo As String) As Boolean
        If strDo Is Nothing OrElse strDo.Length = 0 Then
            Return True
        Else
            If Not ComponentManager.Permission Is Nothing Then
                Return ComponentManager.Permission.Has(Me, strDo)
            Else
                Return True
            End If
        End If
    End Function

上面就是这个实体内置的几个权限判断方面的方法,其实最重要的就是Has方法,这里是通过另一个类进行权限判断的,实现细节,到以后的章节介绍.比如:我一个订单表,对应了一个实体对象,并且继承于PermissionBase.如果需要增加一个对订单批准的权限只需增加一个方法HasApprove 代码可以简单为 return has("批准") 即可.

下面来看一下,此对象的完整实现

''' -----------------------------------------------------------------------------
''' Project     : Lily.ComponentFramework
''' Class     : ComponentFramework.PermissionBase
''' 
''' -----------------------------------------------------------------------------
''' <summary>
''' 权限实体基类.
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
'''     [zqonline]    2007-03-28    Created
''' </history>
''' -----------------------------------------------------------------------------
Public MustInherit Class PermissionBase
    Inherits EntityBase

#Region "类实例化"
    Public Sub New()
        MyBase.New()
    End Sub
#End Region

#Region "访问控制"
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否是添加的权限.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-21    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HasAdd() As Boolean
        Get
            Return Me.Has("添加")
        End Get
    End Property

''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否有删除的权限.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-21    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HasDelete() As Boolean
        Get
            Return Me.Has("删除")
        End Get
    End Property

''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否有更改的权限.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-21    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HasModify() As Boolean
        Get
            Return Me.Has("修改")
        End Get
    End Property

''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否是有查看的权限.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-21    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HasLook() As Boolean
        Get
            Return Me.Has("查看")
        End Get
    End Property

''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 判断当前用户是否有执行某项操作的权限.
    ''' </summary>
    ''' <param name="strDo">操作</param>
    ''' <returns></returns>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-25    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable Function Has(ByVal strDo As String) As Boolean
        If strDo Is Nothing OrElse strDo.Length = 0 Then
            Return True
        Else
            If Not ComponentManager.Permission Is Nothing Then
                Return ComponentManager.Permission.Has(Me, strDo)
            Else
                Return True
            End If
        End If
    End Function
#End Region

#Region "资源权限"
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 筛选表达式.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2006-12-22    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property Filter() As IExpression
        Get
            If Not ComponentManager.Permission Is Nothing Then
                Return ComponentManager.Permission.FilterExpression(Me)
            End If
        End Get
    End Property
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 返回当前实体有那些字段对于当前用户设置了,不可见.
    ''' </summary>
    ''' <value></value>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2007-03-09    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Public Overridable ReadOnly Property HideFields() As String()
        Get
            If Not ComponentManager.Permission Is Nothing Then
                Return ComponentManager.Permission.HideAttribute(Me)
            End If
        End Get
    End Property
#End Region

#Region "重写基类方法"
    Public Overloads Overrides Function Retrieve(ByVal row As System.Data.DataRow, ByVal attributename() As String) As Boolean

If row Is Nothing Then
            Return False
        End If

If attributename Is Nothing OrElse attributename.Length = 0 Then
            Return False
        End If

If Me.HideFields Is Nothing OrElse Me.HideFields.Length = 0 Then
            Return MyBase.Retrieve(row, attributename)
        Else
            Dim name() As String
            Dim m As Integer
            For i As Integer = attributename.Length - 1 To 0 Step -1
                If Array.IndexOf(Me.HideFields, attributename(i)) = -1 Then
                    ReDim Preserve name(m)
                    name(m) = attributename(i)
                    m += 1
                End If
            Next

Return MyBase.Retrieve(row, name)
        End If

End Function
    Public Overloads Overrides Function Retrieve(ByVal dr As System.Data.IDataRecord, ByVal attributename() As String) As Boolean

If dr Is Nothing Then
            Return False
        End If

If attributename Is Nothing OrElse attributename.Length = 0 Then
            Return False
        End If

If Me.HideFields Is Nothing OrElse Me.HideFields.Length = 0 Then
            Return MyBase.Retrieve(dr, attributename)
        Else
            Dim name() As String
            Dim m As Integer
            For i As Integer = attributename.Length - 1 To 0 Step -1
                If Array.IndexOf(Me.HideFields, attributename(i)) = -1 Then
                    ReDim Preserve name(m)
                    name(m) = attributename(i)
                    m += 1
                End If
            Next

Return MyBase.Retrieve(dr, name)
        End If

End Function
#End Region

#Region "实体其它方法"
    Public Overrides ReadOnly Property AutoIncrement() As Core.IEntityField
        Get
            Return Nothing
        End Get
    End Property
    Public Overrides ReadOnly Property TableName() As String
        Get
            Throw New FrameworkException("没有指定实体对象的TableName.")
        End Get
    End Property
#End Region

End Class

属性:Filter是用于控制用户只能获取那部份记录!如:只能显示自己的订单

属性:HideFields是当前用户不能查看的字段有那些.

待续

转载于:https://www.cnblogs.com/zqonline/archive/2009/02/20/1394611.html

C/S应用程序权限设计(2)相关推荐

  1. ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要...

    ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm --  Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...

  2. 小程序中的权限设计_低代码布道师的博客-CSDN博客

    日常我们开发小程序的时候,经常需要考虑权限如何设计,比如在我的页面,管理员可以看到一些菜单,而普通用户可以看到另外一些菜单.那如何设计这种带权限的功能呢?本文就以低代码工具为例,看看低代码中是如何设计 ...

  3. 基于shiro的权限设计

    shiro介绍 Apache shiro是一个权限控制框架,它将安全认证抽取出来,实现用户身份认证,权限授权,加密,会话管理等功能,是一个通用的安全认证框架,而且还可以用于分布式集群.功能如下 1.验 ...

  4. 权限设计的一些想法和思考

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:cross my.oschina.net/cloudcros ...

  5. 浅谈OFBiz之权限设计

    简介 Apache Open For Business(Apache OFBiz) 是Apache开源的一个经典ERP项目.它提供了一套企业应用,用于集成以及自动化一些企业的"商业流程&qu ...

  6. [C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍

    今天是个不错的日子,不仅有人收了我做徒弟从此传授我有关C++的一些知识,由于前一段时间喜欢上了外挂的研究也用到了一些MFC的知识及一些Windows APIs编程,但是对C++还是没有从根本上认识.我 ...

  7. 多系统权限设计(一)

    多系统权限设计 1.      多系统基于角色的权限设计 这种方案是最常见也是比较简单的方案,不过通常有这种设计已经够了,这种方案对于每一个操作不做控制,只是在程序中根据角色对是否具有操作的权限进行控 ...

  8. Web开发中的用户角色权限设计总结

    在Web开发中关于权限管理设计大抵涉及到两个方面:一:功能方面权限设计:二:资源方面权限设计.二者比较来看,功能方面权限的可重用性更高. 1.关于权限: 按照角色权限的最简单的设计 名称 描述 用户 ...

  9. 基于RBAC的权限设计

    来源:http://www.phpchina.com/html/73/5173_itemid_10049.html 基于RBAC 的权限设计模型: 1        RBAC 介绍   RBAC 模型 ...

最新文章

  1. VM 下装ubuntu系统
  2. Android PackageManager packages.xml文件格式
  3. 老年计算机音乐,老年音乐影集相机V1.2.5
  4. 三菱四节传送带控制梯形图_一文讲透FX5U PLC程序控制指令及步进梯形图编程
  5. java javah_Java开发网 - 一个javah的问题
  6. python士兵突击_想自学Python进入该行业成为一名自己一直以来就很羡慕和钦佩的程序员,过来人的你有什么想分享的吗?...
  7. IDEA配置码云Gitee的使用详解
  8. java 创建动态int数组_在Scala中创建动态增长数组的最佳方法是什么?
  9. execjs执行报: ‘gbk‘ codec can‘t decode byte 0xac in position 62: illegal multibyte sequence
  10. 面试不慌,看完保证让你写HashMap跟玩一样
  11. MOSS 2010:Visual Studio 2010开发体验(32)——工作流开发最佳实践(四):可重用工作流...
  12. 管理新语:根据工作难度,及时调整负责人员
  13. iOS xcode 9 注释快捷键
  14. 使用fdisk给新增加硬盘分区
  15. linux系统路由器地址查询,查找路由器登录IP地址指南
  16. OA实施成功的几个必备条件
  17. 谷歌雅虎将联手实行即时信息兼容性计划
  18. Unity的UGUI用TexturePacker全自动打图集,包括九宫格切图信息
  19. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机
  20. 20200524西瓜视频的视频下载打开的步骤(未完成)

热门文章

  1. Mysql导入导出数据总结
  2. extjs 提交表单给php,Extjs表单常见验证小结_extjs
  3. img 标签 点击跳出图层_如何用PS在一个图层里画出一个会动的太极八卦图|教程...
  4. python爬取论坛帖子_python爬虫爬取虎扑论坛的帖子名称和链接,为什么只能爬10页就报...
  5. 【kafka】Kafka 幂等 Producer
  6. 【Flink】Flink 反压机制 导致checkpoint 失败
  7. 【Elasticsearch】elasticsearch shard 分片
  8. 【高并发】java JUC中的Semaphore(信号量)
  9. 95-230-028-源码-WordCount走读-获取ExecutionGraph
  10. java8 日期比较_20 个案例教你在 Java 8 中如何处理日期和时间?