二进制管理权限

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using Model.Enum;

/// <summary>
///UserPurview 的摘要说明:用户权限
/// </summary>
public class UserPurview : System.Web.UI.Page
{

    #region 获取用户是否拥有权限
    /// <summary>
    /// 获取用户是否拥有权限,传入权限枚举   (与运算)
    /// </summary>
    /// <param name="_EnumUserPurview">权限枚举</param>
    /// <param name="userPurview">用户所拥有的权限</param>
    /// <returns></returns>
    public static bool GetUserPurview(E_UserPurview _EnumUserPurview, string userPurview = null)
    {
        int num = Convert.ToInt32(Convert.ToString(Convert.ToInt32(_EnumUserPurview), 2));
        
        if (string.IsNullOrEmpty(userPurview))
        {
            //获取当前用户权限
            userPurview = GetUserPurview(Convert.ToInt32(HttpContext.Current.Session["uid"] ?? "0"));
        }

        if (!string.IsNullOrEmpty(userPurview))
        {
            int User_Purview = Convert.ToInt32(userPurview);

            if ((User_Purview & num) != 0)
            {
                return true;
            }
            return false;
        }
        return false;
    }
    #endregion

    
    
    #region 添加权限
    /// <summary>
    /// 添加权限     (或运算)
    /// </summary>
    /// <param name="_E_UserPurview">权限枚举</param>
    /// <param name="uid">修要修改权限用户的uid</param>
    /// <returns></returns>
    public static bool AddUserPurview(E_UserPurview _E_UserPurview, int uid)
    {
        string oldUserPurview = GetUserPurview(uid);
        int UserPurview = Convert.ToInt32(oldUserPurview);
        UserPurview = UserPurview | Convert.ToInt32((Convert.ToString(Convert.ToInt32(_E_UserPurview), 2)));
        bool s = SetUserPurview(UserPurview.ToString(), uid);
        return s;
    }
    #endregion

    #region 删除权限
    /// <summary>
    /// 删除权限   (求补、与运算)
    /// </summary>
    /// <param name="_E_UserPurview">需要删除的权限</param>
    /// /// <param name="uid">修要修改权限用户的uid</param>
    /// <returns></returns>
    public static bool DeleteUserPurview(E_UserPurview _E_UserPurview, int uid)
    {
        string oldUserPurview = GetUserPurview(uid);
        int UserPurview = Convert.ToInt32(oldUserPurview);
        UserPurview = UserPurview & (~Convert.ToInt32((Convert.ToString(Convert.ToInt32(_E_UserPurview), 2))));
        bool s = SetUserPurview(UserPurview.ToString(), uid);
        return s;
    }
    #endregion


    #region 将用户权限写入数据库
    /// <summary>
    /// 将用户权限写入数据库
    /// </summary>
    /// <param name="userPuerview"></param>
    /// <returns></returns>
    public static bool SetUserPurview(string userPuerview, int uid)
    {
        try
        {
            int parentId = Convert.ToInt32(HttpContext.Current.Session["uid"] ?? "0");
            string sql = "UPDATE User SET UserPurview=@userPuerview WHERE UID =@uid and (parentid=@parentId or uid=@parentId)";
            SqlParameter[] param = new SqlParameter[] { 
                new SqlParameter("@userPuerview",userPuerview),
                new SqlParameter("@uid",uid),
                new SqlParameter("@parentId",parentId)
            };
            CDataAccess.ExecSql(sql, param);
            return true;
        }
        catch 
        {
            return false;
        }
    }
    #endregion


    #region 根据用户uid查询用户权限
    /// <summary>
    /// 根据用户uid查询用户权限
    /// </summary>
    /// <param name="uid"></param>
    /// <returns></returns>
    public static string GetUserPurview(int uid)
    {
        try
        {
            int parentId = Convert.ToInt32(HttpContext.Current.Session["uid"] ?? "0");
            string sql = "select User from User where uid =@uid and (ParentID=@parentid or uid=@parentid)";
            SqlParameter[] param = new SqlParameter[] { 
                new SqlParameter("@uid",uid),
                new SqlParameter("@parentid",parentId)
            };
            string userPurview = CDataAccess.ExecuteScalar(sql, param).ToString();
            return userPurview;
        }
        catch 
        {
            return "0";
        }
    }

    #endregion
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Model.Enum
{
    public enum E_UserPurview
    {
        /// <summary>
        /// 能否看到价格 
        /// </summary>
        price_enable = 1,
        /// <summary>
        /// 支付权限
        /// </summary>
        checkout_enable = 2,
        /// <summary>
        /// 修改查看自己账户的权限
        /// </summary>
        account_enable = 4
    }
}

 注意:枚举值类型只能是1,2,4,8,....

如果用3 二进制是11,意味着有两种权限,所以这里舍弃不用(位数代表权限)

 

参考:http://www.cnblogs.com/qfcndtt/archive/2012/08/03/2621713.html

posted @ 2013-06-28 10:22  划破黑夜  阅读(332)  评论(0编辑  收藏  举报