• CRM中角色的一些功能权限的检查和处理



    CRM中现没有正确处理一个用户对应多个角色,应自已做的时间长了记不清了,应一一检查如下功能:
    1.建立角色时对所有目录都没有权限
    检查如下;CRM_RolesAdd,核心代码如下
    --添加操作 
     INSERT INTO acl_roles(
     [id],[created_by],[name],[description],[deleted]
     )VALUES(
     @id,@created_by,@name,@description,@deleted
     )
     DECLARE @ins_error int
     SELECT @ins_error = @@ERROR
     --插入在角色目录表中没有的关系,如果catalog表中无数据时,增加角色会出错,要先增加目录,才能增加角色
     --如果目录中没有明细,就不运行这条语句
     DECLARE @CatalogCount int
     SET @CatalogCount=(SELECT COUNT(*) FROM CRM_CATALOG)
     IF @CatalogCount>0
     BEGIN
    --角色与目录之间是一个笛卡尔积,一个角色对应所有目录,一个目录属于所有角色,初始权限为0处理正确
      insert crm_rolecatalog(RolesID,CatalogID) select a.id,b.id from acl_roles a,crm_catalog b where ltrim(a.id)+ltrim(CAST(b.id AS char(3)))  not in(select ltrim(RolesID)+ltrim(CAST(CatalogID AS char(3))) from crm_rolecatalog) order by a.id
      PRINT '插入CRM_ROLECATALOG'
     END
    2.更改角色对目录是权限只能用update去更新
    RoleBase.RoleCatalogSetPower(roleID,Catalogid,1);//为当前角色目录设定权限
    对应存储过程"
    RoleCatalogUpdatePower
    核心如下:--当前角色当前目录设定权限,正确处理
    UPDATE CRM_RoleCatalog SET IsPower=@IsPower where RolesID=ltrim(@RolesID) AND CatalogID=@CatalogID

    3.一个用户对应一个角色,修改成一个用户对应多用角色
    (无需要设置,去掉限制,增加提示当前用户如果已经是另一个角色,以提配管理员处理错误)
    自已做的都不记得当时怎么做的了,这里提醒自已,角色与用户之间是在行选择用户(弹出窗口)时返回时保存角色与用户关系的.
        string openstr="window.showModalDialog(\'RoleSelectUser.aspx?rand=Math.random()&RolesID="+rolesid+"\',window,'dialogWidth=600px;dialogHeight=400px;status=no;scroll=yes;resizable=no;\');";
        Button1.Attributes.Add("onclick",openstr);
    应增加对当前角色是否经存在于角色用户表中,
    AddRoleLoginuser->CRM_AddRoleLoginuser
     --是否已经插入过,如果已经插入过就不执行插入
     IF NOT EXISTS(SELECT * FROM CRM_RoleLoginuser WHERE RoleID=ltrim(@RoleID) AND LoginUserID=@LoginUserID )--00006
     INSERT INTO CRM_RoleLoginuser([RoleID],[LoginUserID])VALUES(@RoleID,@LoginUserID)

    --增加用当前用户去查是否已经存在crm_roleLoginuser中,并返回角色代码,如果当前角色代码与当前编辑的代码不一样,就提示

    3.动态菜单中正确处理当一个用户有多个角色时,如何设定菜单的权限问题,即应先合并两个角色的权限,合并出两个角色的权限.
    RoleBase.GetCatalogByMoudle(Moduleid,userid)->现在是以模块与用户来提取目录权限的
    对应存储过程
    CRM_GetCatalogByMoudle--处理当一个用户有多个角色时,目录取有权限的那个角色的
    详如下:
    CREATE PROCEDURE CRM_GetCatalogByMoudle
     (
      @ModuleID int,
      @Userid int
     )
    AS
     SET NOCOUNT ON
     --select id as CatalogID,catalogName,description,url from CRM_catalog where moduleid=@ModuleID
     
     select a.RolesID,a.CatalogID,a.IsPower,a.LoginUserID,b.catalogName,b.description,(Case IsPower when 0 then '0.aspx' else b.url end ) as url into #tempmenu from zy_view_LoginuserCatalog a,crm_catalog b where b.id=a.CatalogID and  b.moduleID=@ModuleID and a.LoginUserid=@Userid order by b.postion
     --角色目录用户关系视图
     --select * from zy_view_LoginuserCatalog where loginuserid=27 order by catalogid
     
     select catalogid,sum(ispower) as ispower,max(url) as url,loginuserid,catalogname,[description] from #tempmenu group by catalogid,loginuserid,catalogname,[description]
     drop table #tempmenu
     
     RETURN

    GO

  • 相关阅读:
    10.22 比赛总结 修剪草坪(mowlawn)、玉米迷宫(cornmaze)
    QProcess怎么实时的读到output的信息
    Qt Visual Studio Add-in 导出的 .pri 怎么用?
    Qt写Activex插件 总结
    osg中内嵌QtBrowser
    解决使用osgModeling的Loft生成管子时的bug(续)
    lua中的中文乱码
    std::string的split函数
    解决使用osgModeling的Loft生成管子时的bug
    Qt里的slot
  • 原文地址:https://www.cnblogs.com/hhq80/p/800915.html
Copyright © 2020-2023  润新知