﻿一、概述
    
    权限系统提供了大量的接口函数供具体的业务系统调用，通过使用这些接口函数基本可完成所有与权限、登录相关的功能。
    接口函数位于程序集Chaokers.CN.SysMembership.API中，接口函数均为静态函数，可通过如下形式调用：
    
    1）Chaokers.CN.SysMembership.API.函数名(实参……);           //这种调用方法适用于顶级接口函数。
    2）Chaokers.CN.SysMembership.API.类名.函数名(实参……);      //这种调用方法适用于非顶级接口函数。
    

二、接口函数说明

1、顶级接口函数
   调用方式：Chaokers.CN.SysMembership.API.函数名(实参……);


        /// <summary>
        /// 得到模块列表，用户在这些模块中拥有权限；
        /// <para>该方法返回一个具有下列结构的弱类型数据表：      </para>
        /// <para>------DataTable---------------------------</para>
        /// <para>-- ModuleID int            --模块ID       </para>
        /// <para>-- ModuleName varchar(50)  --模块名称     </para>
		/// <para>-- Icon varchar(50)  --图标文件名     </para>
        /// <para>------------------------------------------</para>
        /// 注：对于角色为系统内置的超级管理员组的操作员，则直接返模块表中所有的模块记录；
        /// </summary>
        /// <returns></returns>
        public static DataTable GetUserModules(string userID);


        /// <summary>
        /// 得到用户的所有权限页（包括功能节点、页面、按钮）;
        /// 该方法返回一个具有下列结构的弱类型数据表：
        /// <para>------DataTable---------------------------</para>
        /// <para>-- PrivilegeID int              --模块ID  </para>
        /// <para>-- ParentID int                 --模块名称</para>
        /// <para>-- PrivilegeName varchar(100)   --权限名称</para>
        /// <para>-- PrivilegePath varchar(200)   --节点路径</para>
        /// <para>-- PageURL varchar(300)         --页面地址</para>
        /// <para>-- BtnID varchar(200)           --按钮ID  </para>
        /// <para>-- PrivilegeType int            --权限类型</para>
        /// <para>-- ModuleID int                 --模块ID  </para>
        /// ------------------------------------------------</para>
        /// 注：对于角色为系统内置的超级管理员组的操作员，将返回所有权限页；
        /// </summary>
        /// <returns></returns>
        public static DataTable GetUserAllPrivileges(string userID);


        /// <summary>
        /// 得到用户的所有节点权限，该结果为用户登陆后，系统左侧显示的操作菜单；       
        /// 该方法返回一个具有下列结构的弱类型数据表：
        /// <para>------DataTable---------------------------</para>
        /// <para>-- PrivilegeID int              --模块ID  </para>
        /// <para>-- ParentID int                 --模块名称</para>
        /// <para>-- PrivilegeName varchar(100)   --权限名称</para>
        /// <para>-- PrivilegePath varchar(200)   --节点路径</para>
        /// <para>-- PageURL varchar(300)         --页面地址</para>
        /// <para>-- BtnID varchar(200)           --按钮ID  </para>
        /// <para>-- PrivilegeType int            --权限类型</para>
        /// <para>-- ModuleID int                 --模块ID  </para>
        /// <para>-- Target varchar(50)           --打开方式  </para>
        /// <para>-- Icon varchar(50)             --权限图标  </para>
        /// <para>------------------------------------------</para>
        /// 注：对于角色为系统内置的超级管理员组的操作员，则直接返回权限表中所有的权限节点（不包括页面和按钮）；
        /// </summary>
        /// <returns></returns>
        public static DataTable GetUserPrivilegesOfNode(string userID);


        /// <summary>
        /// 得到用户有权访问的页面集合；
        /// 该方法返回一个具有下列结构的弱类型数据表：
        /// <para>------DataTable---------------------------</para>    
        /// <para>-- PageURL varchar(300)         --页面地址</para>        
        /// ------------------------------------------------</para>
        /// 注：对于角色为系统内置的超级管理员组的操作员，该方法没有意义；
        /// </summary>
        /// <returns></returns>
        public static DataTable GetUserPrivilegesOfPage(string userID);
        
        
        /// <summary>
        /// 得到用户有权访问的某一页面的按钮集合；
        /// 该方法返回一个具有下列结构的弱类型数据表：
        /// <para>------DataTable---------------------------</para>    
        /// <para>-- PageURL varchar(300)         --页面地址</para>    
        /// <para>-- BtnID varchar(200)           --按钮ID  </para>
        /// <para> -----------------------------------------</para>
        /// 注：对于角色为系统内置的超级管理员组的操作员，该方法没有意义；
        /// </summary>
        /// <returns></returns>
        public static DataTable GetUserPrivilegesOfBtnByPage(string userID, string pageURL);


        /// <summary>
        /// 判断给定用户是否已经存在；
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        public static bool UserExists(string userID);


        /// <summary>
        /// 得到用户的角色；
        /// <para>该方法返回一个具有下列结构的弱类型数据表：</para>
        /// <para>------DataTable---------------------------</para>
        /// <para>-- UserID int              --模块ID       </para>
        /// <para>-- RoleID int              --模块名称     </para>
        /// <para>-- RoleName varchar(50)    --权限名称     </para>
        /// <para>-- RoleDesc varchar(200)   --节点路径     </para>        
        /// <para>------------------------------------------</para>
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        public static DataTable GetUserRoles(string userID);


        /// <summary>
        /// 得到用户角色名；
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        public static string GetUserRoleName(string userID);


        /// <summary>
        /// 得到用户的员工编号；
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        public static string GetUserEmployeeNo(string userID);


        /// <summary>
        /// 检测用户名和密码是否正确；
        /// 如果正确，则返回true；否则，返回false；
        /// </summary>
        /// <param name="userID">用户名</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        public static bool CheckUserIDAndPassword(string userID, string password);


        /// <summary>
        /// 加载用户有权访问的页面集合（到Cache中；）；
        /// 建议在登陆时调用该方法；
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        public static void LoadUserPrivilegesOfPage(string userID);


        /// <summary>
        /// 得到所有的公共页面，这些页面不需要进行任何身份验证即可访问；
        /// 这些页面的地址存储于SysMembership_CommonPages表中；
        /// </summary>
        /// <returns></returns>
        public static List<string> GetCommonPages();

2、权限验证接口函数
   调用方式：Chaokers.CN.SysMembership.API.Privilege.函数名(实参……);
   
        /// <summary>
        /// 判断是否有访问该页面的权限；
        ///<para>如果有，则返回true；否则返回false；</para>
        /// </summary>
        /// <param name="userID">用户名</param>
        /// <param name="roleName">角色名</param>
        /// <param name="isCommonPage">是否为公共页面；如果是则返回true，否则返回false</param>
        /// <returns></returns>
        public static bool HasAccessPrivilege(string userID, string roleName, ref bool isAdministrator, ref bool isCommonPage);
        

        /// <summary>
        /// 根据用户是否有权限执行该页面上的按钮操作来设置按钮状态；
        /// <para>应用按钮权限后，如果用户没有执行按钮的权限，</para>
        /// <para>则点击按钮的时候弹出会“您没有执行该按钮的权限”的对话框，</para>
        /// <para>然后终止执行；</para>
        /// </summary>
        /// <param name="userID">用户名</param>
        /// <param name="roleName">角色名</param>
        /// <param name="page">当前页面实例；</param>
        public static void ApplyBtnExecutePrivilege(string userID, string roleName, System.Web.UI.Page page);
            

3、登录验证接口函数
   调用方式：Chaokers.CN.SysMembership.API.Passport.函数名(实参……);
   
        /// <summary>
        /// 保存登录信息；
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="roleName"></param>
        /// <param name="employeeNo"></param>
        public static void SaveAuthInfo(string userID, string roleName, string employeeNo);


        /// <summary>
        /// 验证是否已经登录；
        /// </summary>
        /// <param name="userID">用户名</param>
        /// <param name="roleName">角色名</param>
        /// <param name="employeeNo">员工编号</param>
        /// <returns></returns>
        public static bool Authenticate(ref string userID, ref string roleName, ref string employeeNo);

三、权限图标说明
模块图标
   位置：Upload/IconModule
权限图标
   位置：Upload/IconPrivilege
