Click here to Skip to main content
15,896,269 members
Articles / Programming Languages / C#

Application Security Model

Rate me:
Please Sign up or sign in to vote.
3.75/5 (9 votes)
14 May 2008CPOL3 min read 31.4K   192   25  
Article describes an easy and light way to secure access to methods in your application.
using System;
using System.Collections.Generic;
using System.Data;
using SecuredLibrary.BusinessObjects;
using SecuredLibrary.Common;
using SecuredLibrary.Model.Interfaces;

namespace SecuredLibrary.Model
{
    public class ExampleModel : IModel
    {
        private DataSet dataBase = new DataSet();
        private string dbFilePath = "DB.xml";
       

        #region IModel Members

        /// <summary>
        /// Gets secured object filtered by SecuredObject and UserId
        /// </summary>
        /// <param name="SecuredMethod"></param>
        /// <param name="UserId"></param>
        /// <returns></returns>
        public SecuredObject GetSecuredObject(string SecuredMethod, long UserId)
        {
            RefreshDataBase();
            DataTable securedObjectTable = dataBase.Tables[TextLabels.SecuredObjectTableName];

            SecuredObject returnSecuredObject = null;

            for (int i = 0; i < securedObjectTable.Rows.Count; i++)
            {
                DataRow tempRow = securedObjectTable.Rows[i];
                string tempSecuredMehtod = tempRow[TextLabels.SecuredMethodColumnName].ToString();
                long tempUserId = Int64.Parse(tempRow[TextLabels.UserIdColumnName].ToString());

                if(String.Compare(tempSecuredMehtod, SecuredMethod, false) == 0 && tempUserId == UserId)
                {
                    returnSecuredObject = new SecuredObject();
                    returnSecuredObject.Id = Int64.Parse(tempRow[TextLabels.IdColumnName].ToString());
                    returnSecuredObject.SecuredMethod = tempSecuredMehtod;
                    returnSecuredObject.UserId = tempUserId;
                    break;
                }
            }

            return returnSecuredObject;
        }

        /// <summary>
        /// Gets secured object list
        /// </summary>
        /// <returns></returns>
        public IList<SecuredObject> GetSecuredObject()
        {
            RefreshDataBase();
            DataTable securedObjectTable = dataBase.Tables[TextLabels.SecuredObjectTableName];

            IList<SecuredObject> returnSecuredObjectList = new List<SecuredObject>();

            for (int i = 0; i < securedObjectTable.Rows.Count; i++)
            {
                DataRow tempRow = securedObjectTable.Rows[i];
                string tempSecuredMehtod = tempRow[TextLabels.SecuredMethodColumnName].ToString();
                long tempUserId = Int64.Parse(tempRow[TextLabels.UserIdColumnName].ToString());

                    SecuredObject tempSecuredObject = new SecuredObject();
                    tempSecuredObject.Id = Int64.Parse(tempRow[TextLabels.IdColumnName].ToString());
                    tempSecuredObject.SecuredMethod = tempSecuredMehtod;
                    tempSecuredObject.UserId = tempUserId;

                returnSecuredObjectList.Add(tempSecuredObject);
               
            }

            return returnSecuredObjectList;
        }

        /// <summary>
        /// Inserts SecuredObject into DB
        /// </summary>
        /// <param name="SecuredObjectInstance"></param>
        /// <returns>Id of inserted SecuredObject</returns>
        public long InsertSecuredObject(ref SecuredObject SecuredObjectInstance)
        {
            RefreshDataBase();
            
            long newId = GetMaxId(TextLabels.SecuredObjectTableName) + 1;

            DataTable securedObjectTable = dataBase.Tables[TextLabels.SecuredObjectTableName];

            DataRow newRow = securedObjectTable.NewRow();
            newRow[TextLabels.SecuredMethodColumnName] = SecuredObjectInstance.SecuredMethod;
            newRow[TextLabels.UserIdColumnName] = SecuredObjectInstance.UserId;
            newRow[TextLabels.IdColumnName] = newId;

            securedObjectTable.Rows.Add(newRow);

            SaveDataBase();

            return newId;
        }

        #endregion

        #region Private helpers

        private long GetMaxId(string TableName)
        {
            DataTable tempTable = dataBase.Tables[TableName];

            long maxId = 0;

            for(int i = 0; i < tempTable.Rows.Count; i++)
            {
                long tempValue = Int64.Parse(tempTable.Rows[i][TextLabels.IdColumnName].ToString());

                if(tempValue > maxId)
                {
                    maxId = tempValue;
                }
            }


            return maxId;
        }

        private void SaveDataBase()
        {
            dataBase.WriteXml(dbFilePath);
        }

        private void RefreshDataBase()
        {
            dataBase.ReadXml(dbFilePath);
        }

        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Poland Poland
ASP.NET Developer since 2004

Comments and Discussions